在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

我如何正确设置下拉列表(即选择列表),以便我可以从数据库显示数据?

在MVC 5中正确设置DropDownListFor

您需要两个属性:一个用于保存选定值,另一个用于保存选择列表选项:

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)