加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何从MVC 3中的View中将List或Collection返回给

发布时间:2020-12-16 00:05:22 所属栏目:asp.Net 来源:网络整理
导读:有人请帮我从我的观点正确返回此列表.我不明白为什么我为fieldModelList返回null我尝试传递给控制器??… 这是我的观点: @model ListRegions.SOA.UI.CopyBookSchemaCreator.Models.FieldModelscript type="text/javascript" src="~/Scripts/jquery-ui-1.8.11
有人请帮我从我的观点正确返回此列表.我不明白为什么我为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为fieldModelList,我希望这将是我在视图中输入到texbox中的值的列表. model 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; }
    }
}

解决方法

Phil Haack wrote an article前段时间解释了如何绑定集合(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的部分视图添加到强类型为FieldModel的/ Views / Shared

@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]);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读