在页面加载时设置多个下拉列表的默认值

时间:2013-06-04 03:22:44

标签: asp.net-mvc-3 razor

我有一个模特,

public class Customer
{
 public string Name { get; set;}
 public string CountryCode { get; set;}
}

在控制器中

var model = new List<Customer> 
{ 
    new Customer { Name = "foo", CountryCode = "US"},
    new Customer { Name = "bar", CountryCode = "UK",
};          
return PartialView("_Edit", model);

显示所有国家/地区的扩展方法: -

public class CountryList
{
public static IEnumerable<SelectListItem> CountrySelectList
    {
        get
        {
            var list = new List<SelectListItem>()
            {
                new SelectListItem { Value = "US", Text="US" },
                new SelectListItem { Value = "UK", Text="UK" },
            };

            return list;
        }
    }
}

在PartialView中

@model List<Customer>

@Html.DropDownListFor(model => model[i].CountryCode, CountryList.CountrySelectList, "Select Country Type")

但是下拉菜单没有选择每个客户的国家/地区代码?有什么想法吗?

PS:正在使用model [i] =&gt;这是Customer类型,为简单起见,我在渲染html标签之前删除了forloop。

@using(Html.BeginForm())
{
   for(int i = 0; i < Model.Count(); i++)
   {
      @Html.TextBoxFor(model => model[i].Name)
      @Html.DropDownListFor..........
   }
}

1 个答案:

答案 0 :(得分:1)

因为你的CoutryList帮助器确实返回了一个SelectListItems列表,它们都将Selected属性设置为False(这是默认值)。

我会按如下方式重写你的助手方法:

public static IEnumerable<SelectListItem> CountrySelectList(string selectedCountryCode)
{
    get
    {
        var list = new List<SelectListItem>()
        {
            new SelectListItem { Value = "US", Text="US" },
            new SelectListItem { Value = "UK", Text="UK" },
        };

        var selectedListItem = list.FirstOrDefault(t=>t.Value== selectedCountryCode);

        if(selectedListItem!=null)
          selectedListItem.Selected=true;


        return list;
    }
}

在视图中:

@Html.DropDownListFor(model => model[i].Customer, CountryList.CountrySelectList(model[i].Customer.CountryCode), "Select Country Type")