[英]ASP.NET MVC posting list from view to controller
我的ASP.NET MVC應用程序中有一個視圖模型:
public class FiltersViewModel
{
public IEnumerable<SelectListItem> AvailableFilters { get; set; } // fills a drop down menu
public IList<TechnologyFilter> TechnologyFilters { get; set; }
public IList<ContractTypeFilter> ContractTypeFilters { get; set; }
public FiltersViewModel()
{
this.TechnologyFilters = new List<TechnologyFilter>();
this.ContractTypeFilters = new List<ContractTypeFilter>();
}
}
然后在我的控制器中,從下拉菜單中選擇選定的值,並創建一個特定的過濾器對象(Technology或ContractType過濾器),然后返回View,其中具有以下代碼:
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.DropDownListFor(m => m.SelectedFilterId, Model.AvailableFilters)
if (Model.TechnologyFilters != null)
{
@for (int i = 0; i < Model.TechnologyFilters.Count; i++)
{
<div id="technologyFilter">
@Html.HiddenFor(m => m.TechnologyFilters[i].Name)
@Html.DisplayFor(m => mTechnologyFilters[i].Name)
</div>
}
}
}
如果以這種方式完成了HTML標記,並且視圖模型已從服務器發布回去,則視圖模型將正確填充TechnologyFilters列表。 但是,當我在局部視圖中提取for循環時,數據停止正確地回發並且我的TechnologyFilters列表為空:
相同的視圖,但是這次調用了局部視圖:
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.DropDownListFor(m => m.SelectedFilterId, Model.AvailableFilters)
if (Model.TechnologyFilters != null)
{
Html.RenderPartial("_TechnologyFilters", Model.TechnologyFilters);
}
_TechnologyFilters.cshtml部分視圖:
@model List<MVCFilters.Models.TechnologyFilter>
<div id="technologyFilters">
@for (int i = 0; i < Model.Count; i++)
{
<div id="technologyFilter">
@Html.HiddenFor(m => m[i].Name)
@Html.DisplayFor(m => m[i].Name)
</div>
}
</div>
在這兩種情況下,HTML數據的生成方式不同,我希望有一種方法可以使其保持恆定(就像第一張圖片一樣)。
不使用部分視圖:
使用局部視圖:
感謝您提供的任何幫助!
老實說,這可能是一個好用的EditorTemplate
候選人,這樣您就不會在前綴方面遇到任何問題:
@Html.EditorFor(m => m.TechnologyFilters)
但是,無需使用編輯器模板,可以使用的一種方法是通過執行以下操作在ViewDataDictionary
中的部分聲明中指定前綴:
Html.RenderPartial("_TechnologyFilters", Model.TechnologyFilters, new ViewDataDictionary
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "TechnologyFilters" }
}))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.