ASP.. NET MVC更新模型不起作用

本文关键字:模型 不起作用 更新 MVC NET ASP | 更新日期: 2023-09-27 17:50:23

我想更新一个客户端类型的实体。

[HttpPost]
public ActionResult Manage(String id, FormCollection collection)
{
    // Create service
    ClientService service = new ClientService();
    // Read existing client
    Client c = service.FindByUsername(id);
    // Update client by using values from submitted form collection
    UpdateModel(c, "Client");
    service.Update(c);
    return View(c);            
}

服务返回客户端类型实体。客户端具有以下属性:Username, FirstName, LastName, Id -这些是提交集合中的键。

另外,客户端实体有一个订单列表(由SQL Metal添加)以及一个用于对象跟踪的Version字段。

当UpdateModel行被击中时,它不会出错,但对象c中的值不会被更新。问题不在service.Update(c),而在UpdateModel(c, "Client")

我做错了什么?

谢谢编辑:

客户端由SQL金属映射。

其属性如下:

  1. int Id
  2. 字符串的用户名,
  3. 字符串Firstname;
  4. 字符串Lastname;
  5. <
  6. 时间戳版本/gh>
  7. IQuerable命令;

错误(内部异常为null)

System.InvalidOperationException was unhandled by user code
  Message=The model of type 'Shop.MVC.Data.Client' could not be updated.
  Source=System.Web.Mvc
  StackTrace:
       at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String prefix, String[] includeProperties, String[] excludeProperties, IValueProvider valueProvider)
       at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model)
       at Shop.MVC.Web.Controllers.ClientController.Manage(String id, FormCollection collection) in C:'Codebox'ARE002'VideoPlayerPrototype'Shop.MVC.Web'Controllers'ClientController.cs:line 45
       at lambda_method(Closure , ControllerBase , Object[] )
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
  InnerException:

ASP.. NET MVC更新模型不起作用

最有可能的问题是没有一个属性以"Client"开头。

在不知道你的模型的细节的情况下,很难说,但删除"Client",我相信应该解决这个问题。


<标题> 更新

您可能有一些验证规则。尝试使用TryUpdateModel(),它不会对模型进行验证。

我同意Sergey的观点,您需要调用Save更改以便持久化这些更改。从你的后行动,我没有看到任何地方,这是持续到DB。你只是在调用UpdateModel,但是我看不到SaveChanges

希望能有所帮助

您需要在ClientService上提交更改

问题是在HTML结构中-有一个嵌套的表单导致UpdateModel方法失败,因为它包含两个表单的FormCollection