试图让UpdateModel适用于我的用户。 User类具有基本的字符串属性,例如CompanyName,FirstName,LastName等,因此没有任何异国情调。
这是我的观点的标题:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Public.Master" Inherits="System.Web.Mvc.ViewPage<User>" %>
他们提交后,在我的控制器中,代码如下所示:
[HttpPost]
public ActionResult Edit(string id, FormCollection collection)
{
try
{
User myUser = db.Get<IUserRepository>().Get(id);
UpdateModel(myUser);
db.Update(myUser);
return RedirectToAction("Index", "Home");
}
catch
{
return View();
}
}
过去进入FormCollection的值具有以下值:
[0] "FirstName" string
[1] "LastName" string
[2] "Email" string
这是我的UserModelBinder(取出一些错误检查代码),这似乎是问题的根源:
public class UserModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
IPrincipal p = controllerContext.HttpContext.User;
User u = db.Get(p.Identity.Name);
return u;
}
}
虽然我从数据库获得的myUser拥有其所有原始值,但控制器的UpdateModel从未实际进行任何更改。我已经读过人们对ViewModels以及使用哪个前缀的问题,但我只是传入常规数据库对象。
奇怪的是,此用户编辑是针对我的“公共”区域的,而我已经具有针对“管理”区域的“用户”编辑,它使管理员可以更改其他“属性”。尽管代码几乎相同,但“用户”编辑的“管理员”区域工作正常,但用户编辑的“公共”区域却无法正常工作。
更新:
原来这是一个自定义ModelBinding问题,方法是将UserModelBinding更改为从DefaultModelBinder派生并添加到BindModel方法中:
if (bindingContext.Model != null)
return base.BindModel(controllerContext, bindingContext);
一切似乎都正常。
最佳答案
试试这个
public ActionResult Edit(User thisUser)
ID可能需要来自隐藏字段。
另外,您还需要确保字段名称与用户属性名称匹配。
您不需要做任何其他事情,因为对象中应该包含值。
如果这没有帮助,请告诉我,我将删除此答案
编辑
这是我的更新方法之一
[HttpPost]
public ActionResult EditCustomer(Customer customer)
{
//ensure that the model is valid and return the errors back to the view if not.
if (!ModelState.IsValid)
return View(customer);
//locate the customer in the database and update the model with the views model.
Customer thisCustomer = customerRepository.Single(x => x.CustomerID == customer.CustomerID);
if (TryUpdateModel<Customer>(thisCustomer))
customerRepository.SaveAll();
else
return View(customer);
//return to the index page if complete
return RedirectToAction("index");
}
编辑2
我的自定义模型活页夹
public class CustomContactUsBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ContactFormViewModel contactFormViewModel = bindingContext.Model as ContactFormViewModel;
if (!String.IsNullOrEmpty(contactFormViewModel.Name))
if (contactFormViewModel.Name.Length > 10)
bindingContext.ModelState.AddModelError("Name", "Name is too long. Must be less than 10 characters.");
base.OnModelUpdated(controllerContext, bindingContext);
}
}
关于asp.net - ASP.Net MVC Controller UpdateModel不更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3774287/