ASP.Net 核心 MVC 从 Select 控件的视图访问 ViewModel

ASP.Net Core MVC Accessing a ViewModel From a View for a Select control

首先我想说我是这方面的新手,我的背景是 asp 网络表单,我正在尝试将我的技能更新到最新的开发语言。

我有一个视图需要访问多个模块,所以我创建了一个视图模型并将其传递给视图。我的问题是当我尝试从视图模型访问列表以填充 select (下拉列表)时。我不断收到错误消息。下面是我的视图模型:-

    public class CustomerDetailsViewModel
    {
        public Customer customer { get; set; }    
        public IEnumerable<Lookups> titles { get; set; }
        public List<Lookups> ePCs { get; set; }
        public List<Lookups> jobStages { get; set; }
    }

下面是我的 select 控件代码。我尝试访问标题列表时出现错误。

        <div class="form-group">
            <label asp-for="customer.Title_Id" class="col-sm-2 col-md-4 col-form-label">Title</label>
            <select app-for="Title_Id" asp-items="@(new SelectList(titles,"PK_Id","Description"))"></select>
        </div>

既然你已经创建了一个视图模型,我假设你的视图有 @model 指令:

@model CustomerDetailsViewModel

当您将视图模型从控制器传递到视图时,可以通过 Model 属性 在视图中访问它。 asp-for 标签助手不需要 Model 属性,它是隐式的。另一方面,asp-items 不能那样工作,它需要 Model 前缀:

<select asp-for="customer.Title_Id" 
        asp-items="@(new SelectList(Model.titles,"PK_Id","Description"))">
</select>
        

此外,由于您所有的视图模型属性都是 public,因此命名约定是使用 PascalCase 个名称:

 public class CustomerDetailsViewModel
 {
        public Customer Customer { get; set; }    
        public IEnumerable<Lookups> Titles { get; set; }
        public List<Lookups> EPCs { get; set; }
        public List<Lookups> JobStages { get; set; }
 }