首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自定义类的模板

自定义类的模板
EN

Stack Overflow用户
提问于 2012-11-29 16:23:14
回答 1查看 175关注 0票数 0

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

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

代码语言:javascript
代码运行次数: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; }
}

我可以编辑字符串属性,但不能编辑字段属性。

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

代码语言:javascript
代码运行次数:0
运行
复制
@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 />
}

最后..。

代码语言:javascript
代码运行次数:0
运行
复制
<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>

}

但当我发帖时..。

代码语言:javascript
代码运行次数:0
运行
复制
    [HttpPost]
    public ActionResult FillForm(int id, FormFillModel model)
    {
        return RedirectToAction("UserPage");
    }

model.Fields属性为空。

编辑:结果

代码语言:javascript
代码运行次数:0
运行
复制
<!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>

我该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2012-11-29 16:25:38

在迭代列表时,尝试在编辑模板中使用索引访问:

代码语言:javascript
代码运行次数:0
运行
复制
@for (int i=0; i<Model.Count(); i++)
{
    <div class="editor-field">
        @Html.TextBoxFor(model => Model[i].Val)
    </div>
}

这将为输入字段(如Fields[0].ValFields[1].Val )提供索引,这是模型绑定器将值绑定到list属性所必需的。

编辑我在您的视图/模型中发现了一个不一致的地方:

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

代码语言:javascript
代码运行次数:0
运行
复制
@Html.EditorFor( model => model.FieldsList.Fields, "FormFieldsListModel")

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13630137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档