我有一个MVC 3应用程序,我将一个vewmodel从控制器传递给视图。该vewmodel包含一对List<>属性。
public ActionResult MainView()
{
var model = GetViewModel();
return View("SignificantEventsView", model);
}
private SignificantEventsViewModel GetViewModel()
{
var viewModel = new SignificantEventsViewModel();
List<County_Codes> countyCodes = GetCountyCodeList();
List<String> stateNames = countyCodes.OrderBy(o=>o.County_st).Select(o => o.County_st ).Distinct().ToList();
viewModel.selectedState = stateNames.FirstOrDefault();
viewModel.CountyCodesList = countyCodes;
viewModel.StateNames = stateNames;
viewModel.SelectedCounties = new String[]{};
viewModel.SelectedCountyCodes = new String[] { };
viewModel.UnSelectedCounties = new String[] { };
viewModel.UnSelectedCountyCodes = new String[]{};
return viewModel;
}
View看起来像这样:
@model ServicingPortal.ViewModels.SignificantEventsViewModel
@{
ViewBag.Title = "Significant Events";
}
<h2>SignificantEvents</h2>
@using (Html.BeginForm("RefreshCounties", "SignificantEvents", FormMethod.Post, new { id = "significantEventsForm", Model }))
{
<fieldset>
<span class="SpanTextboxEdit">
@Html.Label("states", "States")
<br />
<br />
@Html.DropDownListFor(o => @Model.selectedState
, new SelectList(Model.StateNames)
, new { id = "stateDropDown", onchange = "submit()", name = "test" })
</span>
</fieldset>
...
}
当StateDropdownList被更改时,veiwmodel将传递回控制器,但countyCodes列表始终为null。
我尝试在视图中添加@ Html.HiddenFor(o =&gt; @ Model.CountyCodesList),但它仍然返回null。唯一似乎不为null的值是原始类型,如String或String []。甚至List stateNames也为空。
我不想在每个帖子上重建县代码列表,因为涉及到大量的开销。我必须从数据库中的所有活跃贷款创建列表,其中有数千个。
如何获得列表&lt;&gt;从视图中持续到控制器?
我应该解释一下我在这里想要实现的目标。
我有一个下拉列表和一个多选列表框。下拉列表包含状态,列表框包含按所选状态过滤的县 当选定的状态发生变化时,我需要过滤列表框内容 在客户端执行此任务是有意义的,但我没有找到一个好的解决方案 我承认我的javascript技能非常有限。 我研究的所有解决方案都涉及在服务器端过滤县名单。 我可以很容易地在服务器端实现这一点,但我认为既然我已经建立了列表,为什么不保持原样而不是每次都进入后端。
答案 0 :(得分:0)
简短的回答是,你无法真正做到你想要做的事情。你有点试图解决错误的问题。您应该在服务器端查看使用缓存,以防止每次都返回数据库构建县列表。
答案 1 :(得分:0)
我通过使用TempData解决了这个问题。在回发操作中,我可以从临时数据中获取County List,并将ViewModel CountyCodeList设置为此值。