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

サービスは、クライアント タイプのエンティティを返します。クライアントには次のプロパティがあります: Username、FirstName、LastName、Id - これらは送信されたコレクションのキーです。

さらに、クライアント エンティティには、注文のリスト (SQL Metal によって追加されたもの) と、オブジェクト追跡用のバージョン フィールドがあります。

UpdateModel 行がヒットしてもエラーにはなりませんが、オブジェクト c の値は更新されません。問題はservice.Update(c)ではなく にありUpdateModel(c, "Client")ます。

私は何を間違っていますか?

ありがとうございました

編集: クライアントは SQL メタルによってマップされます。

その属性は次のとおりです。

  1. 整数 ID
  2. 文字列のユーザー名。
  3. 文字列名;
  4. 文字列 姓;
  5. タイムスタンプのバージョン
  6. 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:
4

4 に答える 4

3

最も可能性の高い問題は、で始まるプロパティがないことです"Client"

あなたのモデルの詳細を知らなければ、言うのは難しいですが、 を削除"Client"すれば問題は解決すると思います。


アップデート

いくつかの検証規則がある可能性があります。TryUpdateModel()モデルの検証を行わない whichを使用してみてください。

于 2011-04-18T12:33:06.113 に答える
1

これを持続させるには、変更の保存を呼び出す必要があるというSergeyに同意します。あなたのポストアクションから、これがDBに永続化されている場所はどこにも見当たりません。UpdateModelを呼び出しているだけですが、表示されるSaveChangesはありません。

お役に立てれば

于 2011-04-18T13:33:59.367 に答える
0

HTML の構造に問題がありました - ネストされたフォームがあり、両方のフォームの FormCollection が含まれていたため、UpdateModel メソッドが失敗しました。

于 2011-04-21T15:12:11.027 に答える
0

ClientService で変更を送信する必要があります

于 2011-04-18T12:31:04.520 に答える