在我的MVC3项目中,我有以下模型:
public class CustomerModules
{
public int ModuleId { get; set; }
public string ModuleName { get; set; }
public int CustId { get; set; }
public bool IsActive { get; set; }
public DateTime? ActiveDate { get; set; }
}
public class CustomerModuleList
{
public IEnumerable<CustomerModules> Modules { get; set; }
}
我的控制器如下:
[HttpGet]
public ActionResult EditModules(int custNo)
{
var model = new CustomerModuleList
{
Modules = _customerModules.LoadModulesByCustomerId(custNo)
};
return View(model);
}
[HttpPost]
public ActionResult EditModules(CustomerModuleList model)
{
if (ModelState.IsValid)
{
var custId = model.Modules.First().CustId;
_customerModules.UpdateCustomerModules(model.Modules, custId);
}
return View(model);
}
我的观看片段是:
<% using (Html.BeginForm("EditModules","Admin",FormMethod.Post, new { enctype = "multipart/form-data" })){ %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>CustomerModuleList</legend>
<table>
<tr>
<th>Module Name</th>
<th>Active</th>
<th>Active Date</th>
</tr>
<% foreach (var module in Model.Modules){%>
<tr>
<td><%:Html.Label(module.ModuleName) %></td>
<td>
<%CustomerModules module1 = module;%>
<%:Html.CheckBoxFor(x=>module1.IsActive) %>
</td>
<td><%:Html.Label(module.ActiveDate.ToString()) %></td>
</tr>
<% } %>
</table>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
当我提交回控制器时,IEnumerable<CustomerModules>
模块将返回null。我想知道如何在MVC3中提交IEnumerable
复杂类型?任何想法?
答案 0 :(得分:3)
问题是您没有指定表单提交的对象是CustomerModuleList类型。
在您的views / Shared / EditorTemplates文件中创建名为CustomerModuleList.cshtml和CustomerModules.cshtml的视图。
在CustomerModuleList.cshtml中放
@model CustomerModuleList
<% foreach (var module in Model.Modules){%>
Html.EditorFor(x => module);
<% } %>
然后在CustomerModules.cshtml stick
@model CustomerModules
<tr>
<td><%:Html.Label(Model.ModuleName) %></td>
<td>
<%:Html.CheckBoxFor(x=>x.IsActive) %>
</td>
<td><%:Html.Label(Model.ActiveDate.ToString()) %></td>
</tr>
然后在您的视图片段中用
替换for循环Html.EditorFor(x => Model)
使用我制作的不同类型的IEnumerable对其进行了测试,并且有效。
答案 1 :(得分:2)
这是一个类似但无关的问题。我在这里添加它,希望我能节省一些其他可怜的开发人员4 +小时的故障排除。我不知道这是不是在我的系统上但是...在MVC 3中我发现如果Model包含任何类型的list属性(list,ienumerable,array ...),其名称为Member或OrgMember,模型绑定器会完全失败!去图。
答案 2 :(得分:1)
请查看此帖子:http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/我希望它可以帮助您解决应用中的问题:)
PS:该示例也适用于MVC3而无需任何额外的努力。