0

我有 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 中获取每个下拉列表的值,然后尝试在我的视图中设置该值。由于我正在做的事情,我将所有 DropdownLists 选项都作为“选择”而不是我的 viewModel 中的值。

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

感谢您的帮助和时间。

4

1 回答 1

0

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

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

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

于 2012-10-15T08:55:14.193 回答