我的视图使用 MVCContrib Grid,我需要其中的一些输入字段:
@(Html.Grid(Model.Items)
.RenderUsing(new PostAsListRenderer<ItemModel>("list"))
.Columns(c =>
{
c.Custom(
@<text>
@Html.HiddenFor(x => item.Id), item.Id)
@item.Id
</text>
).Named("Id");
c.For(x => Html.TextBoxFor(y => x.Name)).Named("Name");
c.For(x => Html.TextBoxFor(y => x.Description)).Named("Description");
c.For(x => Html.DropDownListFor(y => x.SelectedItem, Model.SelectListItems)).Named("DropDown");
c.For(x => Html.NameFor(y => x.Name));
}))
问题是文本框的名称属性是:
列表[38ef6173-b837-4d5a-ab2a-28ba9989c879].Value.Name
代替
列表[38ef6173-b837-4d5a-ab2a-28ba9989c879] .名称。
list[38ef6173-b837-4d5a-ab2a-28ba9989c879]是我的自定义渲染器创建的前缀PostAsListRenderer
,它使用TemplateInfo.HtmlFieldPrefix
.
.Name在 ASP.NET MVC 中由ExpressionHelper.GetExpressionText
.
所有输入字段都会出现此问题。
我需要正确的名称值才能将整个网格发布到服务器。
问题是我使用的那种表达方式c.For(x => Html.TextBoxFor(y => x.Name))
。
这是ExpressionHelper.GetExpressionText
方法中的错误吗?
现在我有一个解决方法,它只适用于非复杂属性:
@(Html.Grid(Model.Items)
.RenderUsing(new PostAsListRenderer<ItemModel>("list"))
.Columns(c =>
{
c.Custom(
@<text>
@Html.Hidden(Reflector.GetPropertyName(x => item.Id), item.Id)
@item.Id
</text>
).Named("Id");
c.For(x => Html.TextBox(Reflector.GetPropertyName(y => x.Name), x.Name)).Named("Name");
c.For(x => Html.TextBox(Reflector.GetPropertyName(y => x.Description), x.Description)).Named("Description");
c.For(x => Html.DropDownList(Reflector.GetPropertyName(y => x.SelectedItem), Model.SelectListItems)).Named("DropDown");
}))
有没有更好的方法来创建正确的名称属性值?
编辑#1:
在我看来,这是一个错误。如果您也这么认为,请在以下位置投票:http ://aspnetwebstack.codeplex.com/workitem/638
编辑#2: 这些是我的视图模型:
public class ViewModel
{
public List<ItemModel> Items { get; set; }
public List<SelectListItem> SelectListItems { get; set; }
}
public class ItemModel
{
public int Id { get; set; }
public string SelectedItem { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
该代码也可在以下网址获得:https ://github.com/Rookian/ListModelBinding