首页 > 解决方案 > ASP.Net Core MVC 从选择控件的视图访问 ViewModel

问题描述

首先,我想我是一个新手,我的背景是 ASP Web 表单,我正在尝试将我的技能集更新为最新的开发语言。

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

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

下面是我的选择控件代码。在我尝试访问标题列表的地方出现错误。

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

标签: c#asp.net-coreselectviewmodel

解决方案


由于您已经创建了视图模型,我假设您的视图具有@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; }
 }

推荐阅读