0

他のすべてのモデル項目をコントローラーに戻さずに、モデル内の 1 つのフィールドを更新することは可能ですか?

たとえば、モデルに 4 つのアイテム (id、firstname、lastname、address) があるとします。

xxx.cshtml ファイルに名の編集可能なフィールドが 1 つしかない場合、4 つの項目すべてを httpost に含める必要がありますか? 1 つのフィールドだけを編集したいのに、レコードに含まれるモデルに多くの (つまり 16) フィールドが含まれている場合は意味がありません。

現在、私はレコードを照会し、id と firstname の 2 つのフィールドのみを取得して表示および編集しています。保存すると、保存されていないように見えます。

ありがとう。

4

1 に答える 1

2

あなたのその後はTryUpdateModelです。

ModelBinder がフォーム値を見つけたプロパティのみを更新します。

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryupdatemodel(v=vs.108).aspx

entityframework を使用してデータベースからモデルを取得し、TryUpdateModel を呼び出します (必要に応じて、更新するプロパティのホワイトリストを渡すこともできます。これにより、悪意のあるユーザーがフォームの値を追加してモデルの他のプロパティを変更するのを防ぐことができます)。

戻り値をチェックして、検証エラーが発生したかどうかを確認します。

例:

[HttpPost]
public ActionResult Edit(int id, FormCollection form)
{
   var model=_db.Widgets.Find(id);

   //make sure that the model exists in our database
   if (model==null)
   {
      return HttpNotFoundResult();
   }


   if (TryUpdateModel(model,new string[] {"Property1","Property2"}))
   {
      _db.SaveChanges();
      return RedirectToAction("Index"); //or wherever you want to go
   }
   else  //TryUpdateModel returns false on a validation error
   {
      //return to the view and give the user a chance to fix the validation error(s)
      return View("Edit",model);
   }


}
于 2013-02-12T06:03:08.560 に答える