2012-08-08 66 views
0

我必須有一些設置不正確,因爲我無法獲得的UpdateModel功能基礎上通過的FormCollection傳遞信息,以正確更新我的模型。的UpdateModel沒有更新我的模型

我的視圖的樣子:

@model NSLM.Models.Person 
@{ 
    ViewBag.Title = "MVC Example"; 
} 
<h2>My MVC Model</h2> 
<fieldset> 
    <legend>Person</legend> 
    @using(@Html.BeginForm()) 
    { 
     <p>ID: @Html.TextBox("ID", Model.ID)</p> 
     <p>Forename: @Html.TextBox("Forename", Model.Forename)</p> 
     <p>Surname: @Html.TextBox("Surname", Model.Surname)</p> 
     <input type="submit" value="Submit" /> 
    } 
</fieldset> 

我的模式是:

namespace NSLM.Models 
    { 
     public class Person 
     { 
      public int ID; 
      public string Forename; 
      public string Surname; 
     } 
    } 

和我的控制器:

 [HttpPost] 
     public ActionResult Details(FormCollection collection) 
     { 
      try 
      { 
       // TODO: Add update logic here     
       Models.Person m = new Models.Person(); 

       // This doesn't work i.e. the model is not updated with the form values 
       TryUpdateModel(m); 

       // This does work 
       int.TryParse(Request.Form["ID"], out m.ID); 
       m.Forename = Request.Form["Forename"]; 
       m.Surname = Request.Form["Surname"]; 

       return View(m); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

,你可以看到,如果我手動分配每個屬性它工作正常,所以我沒有設置什麼可以讓模型更新表單值?

感謝,

馬克

回答

1

模型中的替換屬性的字段,即:

namespace NSLM.Models 
{ 
    public class Person 
    { 
     public int ID {get; set;} 
     public string Forename {get; set;} 
     public string Surname {get; set;} 
    } 
} 
+0

謝謝,這是我的情況。 – ca8msm 2012-08-13 07:37:19

1

通過電話獲取到的操作方法已經進行的任何自動模式結合的時間。嘗試更改您的操作方法的輸入參數以接受Person實例。在這種情況下,模型聯編程序將嘗試創建實例並從您的表單傳遞的值中填充它。

+0

謝謝,我我沒有試過這個儘管如此。如果我傳遞一個person實例,那麼它的所有屬性都是null。 – ca8msm 2012-08-08 14:33:13

0

試試這個:

觀點:

@model NSLM.Models.Person 
@{ 
    ViewBag.Title = "MVC Example"; 
} 
<h2>My MVC Model</h2> 
<fieldset> 
    <legend>Person</legend> 
    @using(@Html.BeginForm()) 
    { 
     @Html.HiddenFor(model => model.ID) 

     <p>Forename: @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </p> 
     <p>Surname: @Html.EditorFor(model => model.Surname) 
      @Html.ValidationMessageFor(model => model.Surname) 
     </p> 
     <input type="submit" value="Submit" /> 
    } 
</fieldset> 

控制器:

[HttpPost] 
public ActionResult Details(Person p) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(p).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(p); 
} 
+1

謝謝,我剛剛嘗試過,「p」對象具有所有的空屬性。在這個過程中必須有一些我以前想念的東西,但我不知道它是什麼。 – ca8msm 2012-08-08 14:36:29

+0

也許是因爲它無法根據文本框字段檢索id。我編輯了我的答案,在視圖中添加一個HiddenFor方法,該方法應該有助於將模型與id綁定。 – 2012-08-09 06:32:20

相關問題