我有一个企业的视图模型。该模型包含地址,联系人详细信息以及IEnumerable的视图模型。
我使用编辑器模板来显示复选框。问题是,当我进行编辑操作并发布表单时,类别将返回null。我已经阅读了一些类似的问题,但还没有找到一个似乎有用的解决方案。
我已经查看了自定义模型绑定器而没有运气,目前我认为我没有在编辑器模板中显示正确的信息。我知道复选框需要一个隐藏的输入来与他们一起使用,也许我的问题就在那里?
BusinessViewModel
public class BusinessViewModel
{
public int? Id { get; set; }
[UIHint("ContactDetailsEditorTemplate")]
public ContactDetailsViewModel ContactDetailsViewModel { get; set; }
[UIHint("CheckboxEditorTemplate")]
public IEnumerable<CheckboxViewModel> Categories { get; set; }
}
CheckboxViewModel
public class CheckboxViewModel
{
public int CategoryId { get; set;}
public string Description { get; set;}
public bool Checked { get; set; }
}
CheckboxEditorTemplate
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<ViewModels.BuyWithConfidence.CheckboxViewModel>>" %>
<table class="aligncenter">
<tr class="tRow left"><%
var intBreakLine = 0;
if (Model != null)
{
foreach (var category in Model)
{
if (intBreakLine >= 2)
{
intBreakLine = 0;%>
</tr>
<tr class="tRow left"><%
}%>
<td>
<%= Html.Hidden(string.Format("Categories[{0}].CategoryID", i), category.CategoryId) %>
<%= Html.CheckBox(string.Format("Categories[{0}].Checked", i), category.Checked) %>
</td>
<td><%=category.Description%></td><%
intBreakLine = intBreakLine + 1;
i = i + 1;
}
}%>
</tr>
</table>
这是模板产生的片段:
<input id="Categories_Categories_0__CategoryID" name="Categories.Categories[0].CategoryID" type="hidden" value="1" />
<input id="Categories_Categories_0__Checked" name="Categories.Categories[0].Checked" type="checkbox" value="true" /><input name="Categories.Categories[0].Checked" type="hidden" value="false" />
答案 0 :(得分:1)
看起来你最终会得到3个输入,全部命名为CategoryId。您是否考虑过使用.index
技巧进行集合绑定。或者,您可以使用array[]
表示法。
<%= Html.Hidden("Categories.index", category.CategoryID) %>
<%= Html.Hidden(string.Format("Categories[{0}].CategoryID", category.CategoryID), category.CategoryID) %>
<%= Html.CheckBox(string.Format("Categories[{0}].Checked", category.CategoryID), category.Checked) %>
如果订单保持不变,您可以使用for(int i...
)。
<%= Html.Hidden(string.Format("Categories[{0}].CategoryID", i), category.CategoryID) %>
<%= Html.CheckBox(string.Format("Categories[{0}].Checked", i), category.Checked) %>
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx