当前位置:  开发笔记 > 编程语言 > 正文

MVC6国家下拉列表

如何解决《MVC6国家下拉列表》经验,为你挑选了1个好方法。

我正在尝试使用MVC6 Tag Helpers创建CountryCode和CountryName的下拉列表,以便用户在注册后可以选择他们的国家/地区.到目前为止,视图的相关部分看起来像这样

    

viewmodel的相关部分看起来像这样

    [Display(Name = "Country")]
    public string CountryCode { get; set; }
    public IEnumerable Countries { get; set; }

国家看起来像这样

    public partial class Country
{
    [Key]
    public string CountryCode { get; set; }
    public string CountryName { get; set; }
    public virtual ICollection Users { get; set; }
}

控制器将视图模型返回国家/地区列表

            var model = new IndexViewModel
        {
            CountryCode = user.CountryCode,
            Countries =_customersContext.Countries.OrderBy(c=>c.CountryName),
        };
        return View(model);
    }

但在视图中asp-items="@Model.Countries"有一个波浪形Cannot convert Country to SelectListItem

另外,我无法在表单中找到如何将CountryCode指定为要返回的属性,并将CountryName指定为要显示的属性.



1> Vlince..:

我的下拉菜单的方式有点相似,只是在我的ViewModel中,我的属性是类型SelectList而不是IEnumerable<>.

public class HomeViewModel
{
    public string CountryCode { get; set; }
    public SelectList CountryList { get; set; }
}

然后在控制器中我获取数据并将其转换为具有两个属性"Id"和"Value"的匿名列表.

反过来,我SelectList()在匿名列表中创建了一个新的传递,指定了什么是dataValueField什么以及什么是dataTextField.

public IActionResult Index()
{
    var countries = _customersContext.Countries.OrderBy(c => c.CountryName).Select(x => new { Id = x.Code, Value = x.Name });

    var model = new HomeViewModel();
    model.CountryList = new SelectList(countries, "Id", "Value");

    return View(model);
}

最后,在视图中:

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有