将List <t>发布到控制器操作方法</t>的视图模型

时间:2014-07-31 16:15:56

标签: asp.net-mvc list asp.net-mvc-2 controller asp.net-mvc-viewmodel

我知道有很多关于这方面的帖子,其中大部分都是我整个上午阅读并尝试但仍然无法使其正常工作。

我有一个视图模型:

namespace GrantTracker.ViewModels
{
    public class CoverPageViewModel
    {
        public List<Compliance> Compliances { get; set; }
    }
}

我有一个使用视图模型的部分视图:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<GrantTracker.ViewModels.CoverPageViewModel>" %>

<%
for (var i = 0; i < Model.Compliances.Count; i++)
{ %>               
        <%=Html.HiddenFor(x => x.Compliances[i].ComplianceId) %>
        <%=Html.TextBoxFor(x => x.Compliances[i].ComplianceName) %>                 

<% } %>

这会正确显示文本框及其值:

enter image description here

生成的源对我来说没问题:

<input id="Compliances_0__ComplianceId" name="Compliances[0].ComplianceId" type="hidden" value="1" />
<input id="Compliances_0__ComplianceName" name="Compliances[0].ComplianceName" type="text" value="Human Subjects" />                 

<input id="Compliances_1__ComplianceId" name="Compliances[1].ComplianceId" type="hidden" value="2" />
<input id="Compliances_1__ComplianceName" name="Compliances[1].ComplianceName" type="text" value="Vertebrate Animals" />                 

<input id="Compliances_2__ComplianceId" name="Compliances[2].ComplianceId" type="hidden" value="3" />
<input id="Compliances_2__ComplianceName" name="Compliances[2].ComplianceName" type="text" value="Hazardous Substances" />  

当我提交页面时,文本框属性就是我所说的正确发布:

Compliances[0].ComplianceId:1
Compliances[0].ComplianceName:Human Subjects
Compliances[1].ComplianceId:2
Compliances[1].ComplianceName:Vertebrate Animals
Compliances[2].ComplianceId:3
Compliances[2].ComplianceName:Hazardous Substances

但是,在控制器操作

中访问时,这些值都消失了
[HttpPost]
public ActionResult SaveCoverPage(CoverPageViewModel coverPageViewModel)
{
    return Content(coverPageViewModel.Compliances[0].ComplianceId.ToString());
}

调试器显示它知道它应该包含三个Compliance对象 但是,当钻取时,没有一个具有它们的值:

enter image description here

对此的任何帮助将不胜感激。我真的很困惑。

1 个答案:

答案 0 :(得分:1)

更改您的Compliance课程,如下所示。

public class Compliance
{
    public int ComplianceId { get; set; }
    public string ComplianceName { get; set; }
}

您应该正确定义属性。