【问题标题】:Populating Dropdown in ASP.net Core在 ASP.net Core 中填充下拉列表
【发布时间】:2016-09-16 12:24:10
【问题描述】:

有谁知道如何处理 Asp.net 核心中的下拉菜单。我想我让自己很难理解新的 Asp.net 核心概念。 (我是 Asp.net Core 的新手)。

我有名为DriverVehicle 的模型。基本上,一个人可以在 master 中创建一堆车辆,然后将其附加到 Driver。以便驾驶员与车辆相关联。

我的问题是我也在某些区域使用 viewmodel 来组合两个不同的模型。(从默认模板中了解很少)

我的问题是我不知道下一步是什么,因为 ASP.net Core 是最新的,没有很多教程和 Q/As 可用。

驱动模型

public class Driver
{
    [Required]
    public int Id { get; set; }

    [Required]
    public string ApplicationUserId { get; set; }

    [Required]
    public int VehicleId { get; set; }

    [Required]
    public string Status { get; set; }


    public virtual ApplicationUser ApplicationUser { get; set; }
    public virtual Vehicle Vehicle { get; set; }
}

车辆模型

public class Vehicle
{

    [Required]
    public int Id { get; set; }

    [Required]
    public string Make { get; set; }
    public string Model { get; set; }

    [Required]
    public string PlateNo { get; set; }
    public string InsuranceNo { get; set; }

}

驱动视图模型

    public class DriverViewModel
{
    [Required]
    [Display(Name = "ID")]
    public int ID { get; set; }

    [Required]
    [Display(Name = "User ID")]
    public string ApplicationUserId { get; set; }

    [Required]
    [Display(Name = "Vehicle ID")]
    public IEnumerable<Vehicle> VehicleId { get; set; }
    //public string VehicleId { get; set; }

    [Required]
    [Display(Name = "Status")]
    public string Status { get; set; }


}

这是我的观点

<div class="col-md-10">
   @*<input asp-for="VehicleId" class="form-control" />*@
   @Html.DropDownList("VehicleId", null, htmlAttributes: new { @class = "form-control"})
   <span asp-validation-for="VehicleId" class="text-danger" />
</div>

【问题讨论】:

    标签: asp.net asp.net-core asp.net-core-mvc asp.net-core-1.0


    【解决方案1】:

    查看文档,似乎 asp.net 核心可能正在从 HTML 帮助器转向标签帮助器的使用。以下链接应该会有所帮助

    https://docs.asp.net/en/latest/mvc/views/working-with-forms.html#the-select-tag-helper

    特别是

    @model CountryViewModel
    
    <form asp-controller="Home" asp-action="Index" method="post">
    <select asp-for="Country" asp-items="Model.Countries"></select> 
    <br /><button type="submit">Register</button>
    </form>
    

    注意使用“asp-for”引用要绑定的模型属性,使用“asp-items”引用选择列表项列表的模型属性源以及如何将其应用于选择标记

    为了完整起见,下面引用了文档中使用的示例模型

    namespace FormsTagHelper.ViewModels
    {
    public class CountryViewModel
    {
        public string Country { get; set; }
    
        public List<SelectListItem> Countries { get; } = new List<SelectListItem>
        {
            new SelectListItem { Value = "MX", Text = "Mexico" },
            new SelectListItem { Value = "CA", Text = "Canada" },
            new SelectListItem { Value = "US", Text = "USA"  },
        };
    }
    }
    

    【讨论】:

    • 这可能只是一个 ASP.NET Core / Razor Page 的事情,但这只有在我将 [BindProperty] 添加到 Country 时才有效。
    • 警告所有人!在某些时候,我最终得到了具有自闭合标签的 select 元素,例如&lt;select asp-for="Item" asp-items="Model.Items" /&gt; 而不是 &lt;/select&gt;(我想是因为我是从允许自动关闭的 Input 转换而来的) - 这导致了大约 30 分钟的完全混乱,因为它根本不起作用,但我没有看到任何警告。
    • @jamheadart 我做了同样的事情,然后阅读了这个评论....谢谢哈
    【解决方案2】:

    驱动控制器

    public class DriverController : Controller
    {
        private readonly ApplicationDBContext _context;
    
        public DriverController(ApplicationDBContext context)
        {
            _context = context;
        }
    
        // GET: Driver/Create
        public IActionResult Create()
        {
            ViewData["VehicleId"] = new SelectList(_context.Vehicle, "Id", "PlateNo");
            return View();
        }
    }
    

    驾驶员视图

    @model DriverViewModel
    <form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="VehicleId" class="control-label"></label>
            <select asp-for="VehicleId" class ="form-control" asp-items="ViewBag.VehicleId"></select>
        </div>
    </form>
    

    【讨论】:

      【解决方案3】:

      @model EmployeeViewModel
      
      <form asp-controller="Home" asp-action="SaveEmployee">
        <label asp-for="DesirablePosition">Desirable Position</label>
        <select asp-for="DesirablePosition" asp-items="Model.DesirablePositionItems"></select>
      </form>

      公共类 EmployeeViewModel {

      public string DesirablePosition { get; set; }
      
      public List<SelectListItem> DesirablePositionItems { get; } = new List<SelectListItem> {
      
              new SelectListItem { Value = "j", Text = "Junior" },
      
              new SelectListItem { Value = "m", Text = "Middle" },
      
              new SelectListItem { Value = "s", Text = "Senior" },
          };
      

      }

      公共类 HomeController : 控制器 {

      public IActionResult SaveEmployee(){
      
          return View(new EmployeeViewModel());
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 2020-05-07
        相关资源
        最近更新 更多