获取控制器

时间:2015-11-29 14:58:21

标签: .net asp.net-mvc-5

我有一个视图,我在循环中渲染了部分视图。有一个列表,部分视图与列表中的每个项目绑定。输入值后,我没有在控制器上获得列表的值。

以下是我的观点:

<table id="resourceRequirement" class="table" width="100%" border="0">
    <thead>
        <tr style="background-color:#dfdfdf;">
            <td><div align="center">PRIORITY</div></td>
            <td><div align="center">SYSTEM RESOURCE / COMPONENT</div></td>
            <td><div align="center">RECOVERY TIME OBJECTIVE</div></td>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.ResourceRequirement)
        {
            @Html.Partial("~/Views/Shared/_ResourceRequirement.cshtml", item)
        }
    </tbody>
</table>

以下是我的部分观点:

@model DisasterManagementSystem.Models.BusinessImpactAnalysis.ResourceRequirement
<tr>
    <td>
        @Html.TextBoxFor(m => m.priority)<br />
        <div style="color:red;">
            @Html.ValidationMessageFor(model => model.priority)
        </div>
    </td>
    <td>
        @Html.TextBoxFor(m => m.systemresource)<br />
        <div style="color:red;">
            @Html.ValidationMessageFor(model => model.systemresource)
        </div>
    </td>
    <td>
        @Html.TextBoxFor(m => m.receveryTime)<br />
        <div style="color:red;">
            @Html.ValidationMessageFor(model => model.receveryTime)
        </div>
    </td>
</tr>

这是我的清单:

public List<ResourceRequirement> ResourceRequirement { get; set; }

课程在这里:

public class ResourceRequirement
{
    [Required(ErrorMessage = "*")]
    public string priority { get; set; }

    [Required(ErrorMessage = "*")]
    public string systemresource { get; set; }

    [Required(ErrorMessage = "*")]
    public string receveryTime { get; set; }
}

请告知我何时尝试从帖子上获取模型列表我将列表视为空。

2 个答案:

答案 0 :(得分:7)

您使用foreach循环且部分生成重复name属性而没有索引器(因此无法绑定到集合)和重复id属性(无效的html)。

使用EditorTemplate而不是部分视图。将当前的部分视图重命名为ResourceRequirement.cshtml(即匹配类的名称)并将其放在/Views/Shared/EditorTemplates文件夹(或/Views/yourController/EditorTemplates文件夹中)

然后在主视图中,删除foreach循环并将其替换为

<tbody>
    @Html.EditorFor(m => m.ResourceRequirement)
</tbody>

EditorFor()方法接受IEnumerable<T>并为集合中的每个项目生成正确的html。如果您检查html,现在您将在表单控件中看到正确的名称属性

<input type="text" name="ResourceRequirement[0].priority" .... />
<input type="text" name="ResourceRequirement[1].priority" .... />
<input type="text" name="ResourceRequirement[2].priority" .... />

等。当您提交表单时将绑定到您的模型(将其与您当前生成的表格进行比较)

答案 1 :(得分:2)

如你所愿,List只能在Controller中传递,只需通过类似

的方法传递List
public Actionresult List()
{
  var search = from m in db.resourcerequirement select m;
  return PartialView("_List",search.tolist());
}

之后在Partial View _List

@model DisasterManagementSystem.Models.BusinessImpactAnalysis.ResourceRequirement
<tr>
    <td>
        @Html.TextBoxFor(m => m.priority)<br />
        <div style="color:red;">
            @Html.ValidationMessageFor(model => model.priority)
        </div>
    </td>
    <td>
        @Html.TextBoxFor(m => m.systemresource)<br />
        <div style="color:red;">
            @Html.ValidationMessageFor(model => model.systemresource)
        </div>
    </td>
    <td>
        @Html.TextBoxFor(m => m.receveryTime)<br />
        <div style="color:red;">
            @Html.ValidationMessageFor(model => model.receveryTime)
        </div>
    </td>
</tr>

显示部分视图

@{Html.RenderAction("List", "ControllerName");}