请有人帮我从我的角度正确返回此列表。我不明白为什么我要传递给 Controller ​​的fieldModelList返回null ...

这是我的看法:

@model List<Regions.SOA.UI.CopyBookSchemaCreator.Models.FieldModel>

<script type="text/javascript" src="~/Scripts/jquery-ui-1.8.11.min.js"></script>

@using (Html.BeginForm("GetResponse", "TestMethods", FormMethod.Post))
{

<table id="tblMethods">
    <tr>
        <th>
            Property Name
        </th>
        <th>
            Request
        </th>
    </tr>

    @foreach (FieldModel fieldModel in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(m => fieldModel.PropertyName)
            </td>
            <td>
                @Html.TextBoxFor(m => fieldModel.PropertyValue)
            </td>
        </tr>
    }

</table>

<div>
    <input type="submit"/>
</div>

这是我的 Controller :
    [HttpPost]
    public ActionResult GetResponse(List<FieldModel> fieldModelList)
    {
        return GetResponse(fieldModelList);
    }

我碰到了HttpPost方法,但是如果我在其中放置一个断点,我马上就为fieldModelList返回null,我希望这将是我在 View 中输入到texboxes中的值的列表。模型FieldModel ...

我认为我的逻辑,语法或语法存在问题,但是基本上我想做的是将带有每个对应的PropertyName和PropertyValue的FieldModel类型列表返回给 Controller 。我注意到我没有在 View 的BeginForm语句中传递任何类型的id参数。我需要一个吗?

以防万一,这是我的FieldModel模型类:
namespace Regions.SOA.UI.CopyBookSchemaCreator.Models
{
    public class FieldModel
    {
        [Display(Name = "Property")]
        public string PropertyName { get; set; }

    [Display(Name = "Value")]
        public string PropertyValue { get; set; }
    }
}

最佳答案

菲尔·哈克(Phil Haack)wrote an article前一段时间解释了如何绑定(bind)集合(ICollection)以查看模型。它进一步介绍了有关创建编辑器模板的细节,您当然也可以这样做。

基本上,您需要在HTML元素的名称属性前添加索引。

<input type="text" name="[0].PropertyName" value="Curious George" />
<input type="text" name="[0].PropertyValue" value="H.A. Rey" />

<input type="text" name="[1].PropertyName" value="Ender's Game" />
<input type="text" name="[1].PropertyValue" value="Orson Scott Card" />

然后,您的 Controller 可以绑定(bind)FieldModel的集合
[HttpPost]
public ActionResult GetResponse(List<FieldModel> fieldModelList)
{
    return GetResponse(fieldModelList);
}

我不确定100%以下内容会正确命名属性(我建议使用编辑器模板),但是您可以轻松使用htmlAttributes参数并使用索引为其命名。
@for(int i = 0;i < Model.Count;i++)
{
    <tr>
        <td>
            @Html.DisplayFor(m => m[i].PropertyName)
        </td>
        <td>
            @Html.TextBoxFor(m => m[i].PropertyValue)
        </td>
    </tr>
}

编辑器范本

如果您想添加一个编辑器模板,可以将一个名为FieldModel.ascx的局部 View 添加到/Views/Shared中,并将其强类型化为FieldModel
@model Regions.SOA.UI.CopyBookSchemaCreator.Models.FieldModel

@Html.TextBoxFor(m => m.PropertyName) @* This might be a label? *@
@Html.TextBoxFor(m => m.PropertyValue)

并且, View 的负责呈现集合的部分将如下所示:
@for (int i = 0; i < Model.Count; i++) {
    @Html.EditorFor(m => m[i]);
}

09-27 20:00