2

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

[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);            
}

服务返回客户端类型实体。客户端具有以下属性:用户名、名字、姓氏、ID - 这些是提交集合中的键。

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

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

我究竟做错了什么?

谢谢

编辑: 客户端由 SQL 金属映射。

其属性如下:

  1. 整数 ID
  2. 字符串用户名;
  3. 字符串名字;
  4. 字符串姓氏;
  5. 时间戳版本
  6. 可查询的订单;

错误(内部异常为空)

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:
4

4 回答 4

3

可能的问题是没有一个属性以"Client".

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


更新

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

于 2011-04-18T12:33:06.113 回答
1

我同意 Sergey 的观点,即您需要调用 Save changes 才能持久保存。从您的帖子操作中,我看不到将其持久化到数据库的任何地方。您只是在调用 UpdateModel,但我看不到 SaveChanges。

希望这可以帮助

于 2011-04-18T13:33:59.367 回答
0

您需要在 ClientService 上提交更改

于 2011-04-18T12:31:04.520 回答
0

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

于 2011-04-21T15:12:11.027 回答