gpt4 book ai didi

asp.net-mvc - 如何在 MVC 3 中将列表或集合从 View 返回到 Controller ?

转载 作者:行者123 更新时间:2023-12-02 13:31:34 26 4
gpt4 key购买 nike

请有人帮助我从我的角度正确返回此列表。我不明白为什么我尝试传递给 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 上的文本框中输入的值的列表这是模型 FieldModel...

我认为我的逻辑和语法有问题,或者可能和我的语法一样,但基本上我想做的是返回一个 FieldModel 类型的列表,其中每个对应的 PropertyName 和 PropertyValue 到 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; }
}
}

最佳答案

菲尔·哈克 wrote an article前段时间解释了如何将集合(ICollection)绑定(bind)到 View 模型。它详细介绍了有关创建编辑器模板的更多详细信息,您当然也可以这样做。

基本上,您需要在 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]);
}

关于asp.net-mvc - 如何在 MVC 3 中将列表或集合从 View 返回到 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com