有人请帮助我从我的观点中正确地返回此列表。我不明白为什么我为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>
这是我的控制器:
[HttpPost]
public ActionResult GetResponse(List<FieldModel> fieldModelList)
{
return GetResponse(fieldModelList);
}
我正在使用HttpPost方法,但是如果我在其中放置一个断点,我就会立即返回null for fieldModelList,我希望这将是我在视图中输入到texbox中的值的列表这是模型FieldModel ...
我认为我的逻辑与我的语法有关,或者与我的语法有关,但基本上我想要做的是返回一个类型为FieldModel的列表,每个对应的PropertyName和PropertyValue到控制器。我注意到我没有在视图中的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; }
}
}
答案 0 :(得分:5)
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" />
然后,您的控制器可以绑定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
的部分视图添加到/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)
然后,负责呈现集合的视图部分将如下所示:
@for (int i = 0; i < Model.Count; i++) {
@Html.EditorFor(m => m[i]);
}