自定义类的模板

时间:2012-11-29 16:23:15

标签: asp.net-mvc-4 c#-4.0

这是一个非常常见的问题,但我被卡住了!

我有一个模型类,我想在视图中编辑它:

public class FormFillModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }

    public string Sector { get; set; }
    public List<FormFieldModel> Fields { get; set; }
}

我可以编辑字符串属性,但我无法编辑Fields属性。

我为它创建了一个编辑器模板。在〜/ shared / editortemplates / FormFieldsListModel.cshtml下

@model List&lt;SoruCevapForm.Models.FormFieldModel&gt;

@foreach (var field in Model)
{
<div class="editor-label">
    @Html.Label(field.Text)
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => field.Val)
</div>
<br />
}

最后......

<h2>FillForm</h2>
@using (Html.BeginForm())
{
    <fieldset>
        <legend>@Model.Title</legend>
        @Html.HiddenFor(model => model.Id)
        <table>
            <tr>
                <td>
                    <div class="display-label">
                        @Html.DisplayNameFor(model => model.Title)
                    </div>
                </td>
                <td>
                    <div class="display-field">
                        @Html.DisplayFor(model => model.Title)
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div class="display-label">
                        @Html.DisplayNameFor(model => model.Sector)
                    </div>
                </td>
                <td>
                    <div class="display-field">
                        @Html.DisplayFor(model => model.Sector)
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div class="display-label">
                        @Html.DisplayNameFor(model => model.Description)
                    </div>
                </td>
                <td>
                    <div class="display-field">
                        @Html.DisplayFor(model => model.Description)
                    </div>
                </td>
            </tr>
        </table>
    </fieldset>

    <fieldset>
        <legend>Fields</legend>

        @Html.EditorFor( model => model.FieldsList.Fields, "FormFieldsListModel")

        <p>
            <input type="submit" value="Submit" />
        </p>
    </fieldset>

}

但是当我发帖...

    [HttpPost]
    public ActionResult FillForm(int id, FormFillModel model)
    {
        return RedirectToAction("UserPage");
    }

model.Fields属性为空。

编辑:结果Html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>FillForm</title>
    <link href="/Content/site.css" rel="stylesheet"/>

    <script src="/Scripts/modernizr-2.5.3.js"></script>

</head>
<body>
    <br />
    <a href="/Account/Logout">Logout</a>
    <br />


<h2>FillForm</h2>
<form action="/FormManage/FillForm/1" method="post">    <fieldset>
        <legend>TestForm2</legend>
        <input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="1" />
        <table>
            <tr>
                <td>
                    <div class="display-label">
                        Title
                    </div>
                </td>
                <td>
                    <div class="display-field">
                        TestForm2
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div class="display-label">
                        Sector
                    </div>
                </td>
                <td>
                    <div class="display-field">

                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div class="display-label">
                        Description
                    </div>
                </td>
                <td>
                    <div class="display-field">
                        TestForm Description
                    </div>
                </td>
            </tr>
        </table>
    </fieldset>
    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
    <label for="FieldsList_Fields__0__Name">Name</label>
</div>
<div class="editor-field">
    <input id="FieldsList_Fields__0__Val" name="FieldsList.Fields.[0].Val" type="text" value="" />
</div>
<br /><div class="editor-label">
    <label for="FieldsList_Fields__1__Surname">Surname</label>
</div>
<div class="editor-field">
    <input id="FieldsList_Fields__1__Val" name="FieldsList.Fields.[1].Val" type="text" value="" />
</div>
<br /><div class="editor-label">
    <label for="FieldsList_Fields__2__Address">Address</label>
</div>
<div class="editor-field">
    <input id="FieldsList_Fields__2__Val" name="FieldsList.Fields.[2].Val" type="text" value="" />
</div>
<br />

        <p>
            <input type="submit" value="Submit" />
        </p>
    </fieldset>
</form>
<p>
    <a href="/FormManage/UserPage">Back</a>
</p>


    <script src="/Scripts/jquery-1.7.1.js"></script>


</body>
</html>

我该怎么办?

1 个答案:

答案 0 :(得分:1)

在迭代列表时尝试在editortemplate中使用索引访问:

@for (int i=0; i<Model.Count(); i++)
{
    <div class="editor-field">
        @Html.TextBoxFor(model => Model[i].Val)
    </div>
}

这将使用输入字段的索引呈现名称,例如Fields[0].ValFields[1].Val,这是模型绑定器将值绑定到列表属性所必需的。

修改 我发现您的视图/模型不一致:

您的模型具有属性calld Fields。但是在你看来你写了模型。 FieldsList .Fields`:

@Html.EditorFor( model => model.FieldsList.Fields, "FormFieldsListModel")

这怎么可能?什么是您的视图的确切视图模型? 附加的 FieldsList 会呈现错误的字段名,因此无法在回发后绑定到模型的 Fields 属性。