从Controller Action中在View中设置下拉列表的Selected Value

时间:2012-10-15 08:49:44

标签: c# jquery asp.net-mvc c#-4.0 razor

我有5个下拉菜单,基本上显示“选择”,“是”和“否”。最初它们设置为“选择”。一旦用户选择了某些内容,我就会将数据存储在cookie中(使用Jquery)并最终将其传递给ViewModel,以便我可以在Controller中使用它。

当用户刷新页面时,我希望使用ViewModel中的值再次填充这些下拉列表。

目前我有以下代码: -

在视图中我有

<%: Html.DropDownList("FirstQuestYesNo", ViewData["FirstQuestYesNoData"] as SelectList, new { @class = "normalDropdowns" })%>

在我的控制器中我有以下内容: -

            var ddlYesNoData = new SelectList(new[]
                                      {
                                          new {ID="",Name=@Resources.GeneralTerms.GeneralTerms_Select},
                                          new {ID="Yes",Name=@Resources.GeneralTerms.GeneralTerms_Yes},
                                          new{ID="No",Name=@Resources.GeneralTerms.GeneralTerms_No},
                                      },
        "ID", "Name", 1);


        //Refresh the YesNo dropdown with the correct vals
        Dictionary<string, string> YesNoData = new Dictionary<string, string>();
        YesNoData.Add("FirstQuestYesNoData", viewModel.FirstQuestYesNoValue);
        YesNoData.Add("SecondQuestYesNoData", viewModel.SecondQuestYesNoValue);
        YesNoData.Add("ThirdQuestYesNoData", viewModel.ThirdQuestYesNoValue);
        YesNoData.Add("FourthQuestYesNoData", viewModel.FourthQuestYesNoValue);
        YesNoData.Add("FifthQuestYesNoData", viewModel.FifthQuestYesNoValue);

        foreach (var item in YesNoData)
        {
            ViewData[item.Key] = ddlYesNoData;
            if (item.Value != null)
            {
                var selected = ddlYesNoData.Where(x => x.Value == item.Value).First();
                selected.Selected = true;
            }
        }

所以基本上我正在做的是从viewModel获取每个下拉列表的值,然后尝试在我的View中设置该值。由于我正在做的事情,我将所有DropdownLists选项作为“选择”而不是我的viewModel中的值。

问题是我不知道如何“定位”特定的DropDownList。如何使用我的代码从Controller中定位DropDown(在本例中为“FirstQuestYesNo”)?

感谢您的帮助和时间。

1 个答案:

答案 0 :(得分:0)

在您的控制器操作中,只需将FirstQuestYesNo属性设置为相应的值即可。例如:

ViewData["FirstQuestYesNo"] = "Yes"; // this value might come from a cookie

这将自动预选value="Yes"选项。显然,这个值将来自cookie。您不需要任何foreach循环。