在MVC 5中正确设置DropDownListFor

时间:2016-10-27 13:56:05

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 asp.net-mvc-5

我使用ADO.NET Entity框架将我的数据库映射到我的应用程序中的Model。我已经设置了我的ViewModel进行注册,如下所示:

max

这里的具体部分是我想用我的DBContext中的国家/地区填写我的下拉列表,如下所示:

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; }

    }

正如您所看到的那些国家/地区现在是一个列表,在我看来,我想使用Html帮助程序类设置一个下拉列表:

Connection.ctx.Countries.OrderBy(x => x.CountryName).ToList();

这就是我在视图中映射模型的方式:

  @Html.DropDownListFor(model => model.Countries);

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

2 个答案:

答案 0 :(得分:2)

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

public string Country { get; set; }

public IEnumerable<SelectListItem> CountryOptions { get; set; }

然后,在您看来:

@Html.DropDownListFor(m => m.Country, Model.CountryOptions)

您不需要实际的SelectList。事实上,如果你不这样做,那就更好了。 Razor将自动创建SelectList并选择适当的值。

答案 1 :(得分:1)

在viewModel中添加一个属性以保存所选国家/地区的ID:

public class UserRegistrationViewModel
{
    //
    public int SelectedCountryId { get; set; }
    public SelectList Countries { get; set; }

}

我要猜测设置Country属性的时间是这样的:

var countries=Connection.ctx.Countries.OrderBy(x => x.CountryName).ToList();
//...
viemodel.Countries=new SelectList(countries, "CountryId", "CountryName");

然后在您的视图中,您可以执行以下操作:

@Html.DropDownListFor(model => model.SelectedCountryId, Model.Countries)