在MVC 5中正确设置DropDownListFor
本文关键字:设置 DropDownListFor MVC | 更新日期: 2023-09-27 18:15:11
我使用ADO。. NET实体框架将我的数据库映射到我的应用程序中的模型。我已经设置了我的ViewModel注册如下:
public class UserRegistrationViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string PasswordConfirm { get; set; }
public SelectList Countries { get; set; }
}
这里的具体部分是我想用DBContext中的国家填充下拉列表,如下所示:
Connection.ctx.Countries.OrderBy(x => x.CountryName).ToList();
正如你所看到的国家现在是一个列表,在我看来,我想用Html helper类建立一个下拉列表,像这样:
@Html.DropDownListFor(model => model.Countries);
这就是我在视图中映射模型的方式:
@model WebApplication2.ViewModels.UserRegistrationViewModel
我如何正确设置下拉列表(即选择列表),以便我可以从数据库显示数据?
您需要两个属性:一个用于保存选定值,另一个用于保存选择列表选项:
public string Country { get; set; }
public IEnumerable<SelectListItem> CountryOptions { get; set; }
那么,在你看来:
@Html.DropDownListFor(m => m.Country, Model.CountryOptions)
你不需要一个真正的SelectList
。事实上,你最好不要这么做。Razor将自动创建一个SelectList
并选择合适的值。
在viewModel中添加一个属性来保存选定国家/地区的id:
public class UserRegistrationViewModel
{
//
public int SelectedCountryId { get; set; }
public SelectList Countries { get; set; }
}
我猜在设置国家属性的时候你会这样做:
var countries=Connection.ctx.Countries.OrderBy(x => x.CountryName).ToList();
//...
viemodel.Countries=new SelectList(countries, "CountryId", "CountryName");
然后在视图中执行以下操作:
@Html.DropDownListFor(model => model.SelectedCountryId, Model.Countries)