查看包含List的模型,该List包含未在提交时返回的字符串列表

时间:2012-10-05 14:14:28

标签: asp.net-mvc forms razor

使用MVC我有一个FormModel:

public class FormModel
{  
    public string Description { get; set; }
    public List<CustomList> CustomList { get; set; }

    public FormModel(){}
} 

FormModel类由CustomList:

类的列表组成
public class CustomList
{
    public int CustomListId { get; set; }
    public string Description { get; set; }
    public List<String> StringList{ get; set; }

public CustomerList(){}
}

包含字符串列表。我想要实现的是设置一个允许用户编辑StringList中的每个值的表单。为此,我设置了我的观点:

@model CMS.Models.FormModel
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@using(Html.BeginForm("DoStuff", "Create", Model))
{
    <div>
        <p>Description: @(Html.EditorFor(e => e.Description))</p>

        @for (int i = 0; i < Model.CustomList.Count; i++)
        {
            @Html.LabelFor(l => l.CustomList[i].Description)
            @Html.HiddenFor(h => h.CustomList[i].CustomListId)
            for (int a = 0; a < Model.CustomList[i].StringList.Count; a++)
            {
                @Html.EditorFor(e => e.CustomList[i].StringList[a])                                        
            }
        }
        <input type="submit" />
    <div>
}

在提交时,FormModel中的Description返回给控制器,但CustomList返回Empty。我检查过Joe Stevens的一些链接,但似乎我错过了一些东西。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

而不是:

@using(Html.BeginForm("DoStuff", "Create", Model))

尝试:

 @using(Html.BeginForm("DoStuff", "Create", FormMethod.Post))

希望这适合你!

@Mystere Man我不认为在构造函数中实例化列表是个问题。我从来没有听说过或经历过模型绑定的问题,尽管无论如何这仍然是列表的好习惯。

答案 1 :(得分:0)

您需要在两个模型的构造函数中实例化一个空列表。默认模型绑定器不会为您创建空列表。由于没有列表对象,因此不会绑定值。

否则看起来不错。