我有一个带有集合的 ViewModel,例如:
public class CreateCampaignViewModel : ControlPanelViewModel
{
[RequiredField]
public string Name { get; set; }
public List<AdvertisementViewModel> Advertisements { get; set; }
...
}
在 View 中,如果我像这样使用它:
@for (int i = 0; i < Model.Advertisements.Count; i++)
{
<fieldset style="z-index: 0;">
<legend>מודעה</legend>
<table style="width: 100%;">
<tr>
<td>
<label for="@Html.NameFor(m => m.Advertisements[i].Title)">כותרת הפרסומת</label></td>
<td>@Html.TextBoxFor(m => m.Advertisements[i].Title)</td>
</tr>
</table>
</fieldset>
}
一切都很好,当我发布表格时我可以看到列表......
但我想将广告编辑器嵌套在部分 View 中,因此我的 View 变为:
@for (int i = 0; i < Model.Advertisements.Count; i++)
{
Html.RenderPartial("AdvertisementEditor", Model.Advertisements[i]);
}
和我的部分:
@model Pushed.Models.AdvertisementViewModel
<fieldset style="z-index: 0;">
<legend>מודעה</legend>
<table style="width: 100%;">
<tr>
<td>
<label for="@Html.NameFor(m => m.Title)">כותרת הפרסומת</label></td>
<td>@Html.TextBoxFor(m => m.Title)</td>
</tr>
</table>
</fieldset>
我的问题是现在,当我发布表单时,我没有在每个广告的 TextBox 中获取值。
这是合乎逻辑的,因为现在我的
<input>
标签没有 'advertisement[1].Title' 名称,但只有在我的包含模型中不存在的 'Title'。我如何创建一个部分来反射(reflect)单个集合项的 indecies 以便它可以正确地重新发布表单?
最佳答案
找到了解决方案,不敢相信我以前没有找到!
有两种方法可以告诉 MVC.NET 为输入字段添加前缀:
TemplateInfo.HtmlFieldPrefix
如图所示调用局部 View :
@{
Html.RenderPartial("TargetAudienceParameters", Model.TargetAudienceParameter,
new ViewDataDictionary {
TemplateInfo = new TemplateInfo {
HtmlFieldPrefix = "Advertisements[4]" // 4 being an example
}
});
}
关于asp.net-mvc - MVC 处理部分 View 模型中的集合项索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586082/