我有一个模特,
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..........
}
}
答案 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")