2012-08-08 76 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

相关问题