如何为Html.DropDownListFor设置默认选定值

时间:2015-04-09 14:05:25

标签: c# asp.net-mvc asp.net-mvc-4 html.dropdownlistfor

    @if (HttpContext.Current.Request.Cookies[MyCookies.SelectedRegion] != null)
     {
       var defaultRegionValue = HttpContext.Current.Request.Cookies[MyCookies.SelectedRegion].Value;
        @Html.DropDownListFor(m => m.SelectedRionName, Model.RegionList, defaultRegionValue)
     }
     else
     {
       @Html.DropDownListFor(m => m.SelectedRionName, Model.RegionList, "Select")
     }

我在我的视图中有上面的示例,它应该填充一个包含区域列表的Dropdownlist。选择区域后,我将该区域设置为cookie中的默认区域。

下次他们访问应用程序时,我正在检索cookie值,以便我可以预先选择一个区域(在下拉列表中),该区域与变量“ defaultRegionValue ”中的cookie值相匹配。

我上面代码的问题是“ defaultRegionValue ”作为DataTextField出现在下拉列表中,但我想将它作为DataTextValue。

我不想在变量“defaultRegionValue”中显示真实的字符串值,而是希望下拉列表将其读取为selectedValue,然后显示相应的文本值。

此时显示的值和所选值为空。我该如何正确设置?

以下是我的RegionList定义

 public SelectList RegionList
    {
        get
        {
            Dictionary<string, string> items = this.qryRegionList.ToDictionary(k => k.RegionName, v => v.RegionID);
            return new SelectList(items.OrderBy(k => k.Key), myConstants.Value, myConstants.Key);
        }
    }

2 个答案:

答案 0 :(得分:4)

SelectList有一个构造函数重载,它在参数中选择了值。

您可以像这样创建新的SelectList:

@Html.DropDownListFor(m => m.SelectedRionName, 
                           new SelectList(Model.RegionList,
                                          "Value",
                                          "Text",
                                          defaultRegionValue))

答案 1 :(得分:1)

将SelectedRionName设置为等于您的cookie值,而不是声明defaultRegionValue。

@if (HttpContext.Current.Request.Cookies[MyCookies.SelectedRegion] != null)
 {
    Model.SelectedRionName = HttpContext.Current.Request.Cookies[MyCookies.SelectedRegion].Value;
    @Html.DropDownListFor(m => m.SelectedRionName, Model.RegionList)
 }
 else
 {
   @Html.DropDownListFor(m => m.SelectedRionName, Model.RegionList, "Select")
 }