[英]Binding DropdownList property to controller method in ASP.NET Core
我試圖讓下拉列表在特定模型對象的創建視圖上工作。 在這種情況下,所討論的模型是Department,並且在該對象內,還有另一個引用為Division的模型對象。
我的部門模型是一個相當基本的POCO,除了名為Division的屬性,該屬性引用了另一個POCO(請注意,大多數情況下,它僅具有一個ID字段和一個Name字段)。
我已經有一個用於創建視圖的下拉菜單(請參見下面的代碼)
<div class="form-group">
<label asp-for="Division" class="control-label"></label>
@Html.DropDownListFor(dept => dept.Division, new SelectList(ViewBag.Divisions, "Id", "Name"))
</div>
是的,在返回視圖的Create方法中,我正在填充ViewBag.Divisions列表,並且一切都按計划進行。
但是,在控制器的Create方法中,盡管它綁定到視圖上的其他(文本)字段,但我無法弄清楚如何使用下拉菜單中的選擇填充它來填充Department對象的Division屬性。 我的創建方法如下:
public async Task<IActionResult> Create([Bind("Id,Name,Description,IsActive,Division")] Department department)
{
if (ModelState.IsValid)
{
_context.Add(department);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(department);
}
另外,這是我的模型類:
public class Division
{
[Key]
public int Id { get; set; }
[Required]
[Display(Name = "Division Name")]
public string Name { get; set; }
[Display(Name = "Active")]
public bool IsActive { get; set; }
}
public class Department
{
[Key]
public int Id { get; set; }
[Required]
[Display(Name = "Department Name")]
public string Name { get; set; }
public string Description { get; set; }
public Division Division { get; set; }
[Display(Name = "Active")]
public bool IsActive { get; set; }
}
這個想法是特定部門屬於一個部門(並與其關聯)。
謝謝!
編寫您的Department
類,如下所示:
public class Department
{
[Key]
public int Id { get; set; }
[ForeignKey("Division")]
public int DivisionId {get; set;}
[Required]
[Display(Name = "Department Name")]
public string Name { get; set; }
public string Description { get; set; }
[Display(Name = "Active")]
public bool IsActive { get; set; }
public Division Division { get; set; }
}
然后在控制器方法中:
public async Task<IActionResult> Create([Bind("Id,Name,Description,IsActive,DivisionId")] Department department)
{
if (ModelState.IsValid)
{
_context.Add(department);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(department);
}
然后在視圖中:
<div class="form-group">
<label asp-for="Division" class="control-label"></label>
@Html.DropDownListFor(dept => dept.DivisionId, new SelectList(ViewBag.Divisions, "Id", "Name"))
</div>
這是一個簡單的演示,您可以嘗試一下
添加一個具有IList的ViewModel作為下拉列表項的屬性。
public class DepartmentViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public IList<int> Divisions { get; set; }
}
Create.cshtml中的代碼
@model BindDropDownList.Models.DepartmentViewModel
<div class="form-group">
<label asp-for="@Model.Divisions" class="control-label"></label>
@Html.DropDownListFor(depart=>depart.Divisions , (List<SelectListItem>)ViewBag.Divisions)
</div>
在控制器中,檢索ViewBag.Divisions
ViewBag.Divisions = _context.Division.Select(d => new SelectListItem { Value=d.Id.ToString(),Text=d.Name}).ToList();
更改創建方法,如下所示
public async Task<IActionResult> Create(DepartmentViewModel department)
{
//Add department
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.