根据材料的选择填充其他下拉列表。目前,我将下拉列表绑定到MaterialID,然后查询控制器中的dbcontext以获取相应的MaterialName。我不想发布仅 MaterialName,因为我有一个javascript来回发MaterialId以获取级联下拉菜单的值。
当我从下拉列表中选择一个值并提交表单时,如何发布MaterialId和相应的MaterialName?它甚至可能吗?
控制器代码段
[HttpGet]
public ActionResult Index()
{
ViewBag.MaterialList = new SelectList(db.Materials, "MaterialId", "MaterialName");
Material material = new Material();
material.MaterialCollection = db.Materials.ToList<Material>();
...
}
[HttpPost]
public ActionResult Index(Plate plate)
{
try
{
var mname = db.Materials.Where(x => x.MaterialId == plate.Material.MaterialId).ToList();
plate.Material.MaterialName = mname[0].MaterialName;
...
}
EF Model Material.cs
namespace WebApp.Models.EFModels
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
public partial class Material
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Material()
{
this.Lengths = new HashSet<Length>();
this.Widths = new HashSet<Width>();
this.Thicknesses = new HashSet<Thickness>();
}
public int MaterialId { get; set; }
public string MaterialName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Length> Lengths { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Width> Widths { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Thickness> Thicknesses { get; set; }
[NotMapped]
public List<Material> MaterialCollection { get; set; }
}
}
查看摘要
<div class="form-group">
@Html.LabelFor(model => model.Material.MaterialId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-5">
@if (ViewBag.MaterialList != null)
{
@Html.DropDownListFor(model => model.Material.MaterialId,
ViewBag.MaterialList as SelectList,
"Select", new { @class = "form-control" })
}
@Html.ValidationMessageFor(model => model.Material.MaterialId, "", new { @class = "text-danger" })
</div>
</div>