MVC3 Razor将ViewModel传递给控制器​​列表<>一片空白

时间:2014-02-19 21:54:39

标签: asp.net-mvc-3 razor

我有一个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技能非常有限。 我研究的所有解决方案都涉及在服务器端过滤县名单。 我可以很容易地在服务器端实现这一点,但我认为既然我已经建立了列表,为什么不保持原样而不是每次都进入后端。

2 个答案:

答案 0 :(得分:0)

简短的回答是,你无法真正做到你想要做的事情。你有点试图解决错误的问题。您应该在服务器端查看使用缓存,以防止每次都返回数据库构建县列表。

答案 1 :(得分:0)

我通过使用TempData解决了这个问题。在回发操作中,我可以从临时数据中获取County List,并将ViewModel CountyCodeList设置为此值。