【发布时间】:2015-06-22 14:36:49
【问题描述】:
我的 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>();
}
}
然后在我的控制器中,我从下拉菜单中选择选定的值并创建一个特定的过滤器对象(技术或 ContractType 过滤器),然后返回视图,其中我有以下代码:
@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 数据生成方式不同,我想有办法让它保持不变(就像第一张图片一样)。
不使用局部视图:
使用局部视图:
感谢您提供的任何帮助!
【问题讨论】:
标签: c# .net asp.net-mvc razor