2011-06-02 62 views
7

我有下列行动3项显示表单:如何绑定自定义类型的集合(IEnumerable)?

[HttpGet] 
    public ActionResult ReferAFriend() 
    { 
     List<ReferAFriendModel> friends = new List<ReferAFriendModel>(); 
     ReferAFriendModel f1 = new ReferAFriendModel(); 
     ReferAFriendModel f2 = new ReferAFriendModel(); 
     ReferAFriendModel f3 = new ReferAFriendModel(); 

     friends.Add(f1); 
     friends.Add(f2); 
     friends.Add(f3); 
     return View(friends); 
    } 

,然后一个POST操作

[HttpPost] 
    public ActionResult ReferAFriend(IEnumerable<ReferAFriendModel> friends) 
    { 
     if(ModelState.IsValid){ 

编辑 我的视图看起来是这样的:

@model IEnumerable<Models.ReferAFriendModel> 
@for(int i=0;i<Model.Count();i++) 
    { 
     @Html.Partial("_ReferAFriend", Model.ElementAt(i)); 
    } 

部分看起来像这样:

@model Models.ReferAFriendModel 
<p> 
    @Html.LabelFor(i => i.FullName) @Html.TextBoxFor(i => i.FullName)<br /> 
    @Html.LabelFor(i => i.EmailAddress) @Html.TextBoxFor(i => i.EmailAddress) 
    @Html.HiddenFor(i=>i.Id) 
</p> 

当我发布时,我可以看到这些字段发布在Request.Form对象中,例如Request.Form [“FullName”]将显示:“David Beckham”,“Thierry Henry”。 “Chicharito Fergurson”,这是我在表格中输入的值。 但是,在“发布”操作中,“朋友”的值始终为空。 ReferAFriendModel有三个公共属性Id,EmailAddress和FullName。

我在做什么错?

+0

可能出错了你的表单/视图。你应该显示该代码。 – RPM1984 2011-06-02 09:47:27

+0

[如何将IEnumerable列表传递给MVC中的控制器,包括复选框状态?](http://stackoverflow.com/questions/17037858/how-to-pass-ienumerable-list-to-controller-in-mvc-包括复选框状态) – abatishchev 2016-08-27 20:13:49

回答

9

您可以查看following blog post关于数组和字典的连线格式。就我个人而言,我总是在我的视图中使用编辑器模板,这些编辑器模板负责生成输入字段的专有名称,以便默认模型联编程序能够正确地绑定值。

@model IEnumerable<ReferAFriendModel> 
@using (Html.BEginForm()) 
{ 
    @Html.EditorForModel() 
    <input type="submit" value="OK" /> 
} 

,并在相应的编辑器模板(~/Views/Shared/EditorTemplates/ReferAFriendModel.cshtml):

@model ReferAFriendModel 
@Html.EditorFor(x => x.Prop1) 
@Html.EditorFor(x => x.Prop2) 
... 
+2

正是我想要的,我使用的是一个MVC2教程,导致我走错了路。谢谢 – robasta 2011-06-02 10:10:34

相关问题