具有类型列表模型的 mvc 下拉列表
mvc Dropdown list with model of type list
我是 MVC 的新手,但是我一直在尝试在具有 List<> 类型模型的视图中使用下拉列表。这样做的原因是在单个页面上创建多个记录。
我已经能够成功地创建一个非 List<> 类型的视图并且一次只能创建一条记录,但是当我使用List<> 类型的模型。
型号
public class Product
{
public int ProductID { get; set; }
public string Description { get; set; }
public int VatRateID { get; set; }
[ForeignKey("VatRateID")]
public virtual VatRate VatRate { get; set; }
}
控制器
// GET: /Product/Bulkdata
public ActionResult BulkData()
{
PopulateVatRateDropDownList();
List<Product> model = new List<Product>();
model.Add(new Product
{
ProductID = 0,
Description = "",
VatRateID = 1
}
);
return View(model);
}
//
// POST: /Product/Bulkdata
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult BulkData(
[Bind(Include = "Description,VatRateID")]
List<Product> products)
{
try
{
if (ModelState.IsValid)
{
foreach (var p in products)
{
db.Product.Add(p);
}
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DataException)
{
ModelState.AddModelError("", "Bulk - Unable to save changes, Try again, and if the probelm persists contact your administrator");
}
PopulateVatRateDropDownList();
return View(products);
}
private void PopulateVatRateDropDownList(object selectedVatRate = null)
{
var vatRateQuery = from v in db.VatRate
select v;
ViewBag.VatRateID = new SelectList(vatRateQuery, "VatRateID", "VatRateDescription", selectedVatRate);
}
查看
@if (Model != null && Model.Count > 0)
{
int j = 0;
foreach (var i in Model)
{
<tr style="border:1px solid black">
<td>
@Html.EditorFor(m => m[j].Description)
@Html.ValidationMessageFor(m => m[j].Description)
</td>
<td>
@Html.DropDownList("VatRateID", String.Empty)
@Html.ValidationMessageFor(m => m[j].VatRateID)
</td>
<td>
@if (j > 0)
{
<a href="#" class="remove">Remove</a>
}
</td>
</tr>
j++;
}
}
当我 运行 使用此代码的应用程序时,0 总是返回到 vatRateID。除了上述之外,我还尝试了许多其他解决方案,包括
ASP.NET MVC DropDownListFor with model of type List<string>。正如我所提到的,我是 mvc 的新手,所以我知道我可能缺少一些简单的东西。任何帮助将不胜感激。
谢谢
斯蒂芬在评论中回答:
在视图中,根据 Stephen 评论中的文章将 foreach 更改为 for 循环并使用 DropdDownListFor
@Html.DropDownListFor(m => m[i].VatRateID, (IEnumerable<SelectListItem>)ViewBag.VatRateList)
还修改了控制器以将 ViewBag 属性 重命名为 VatRateList
'
private void PopulateVatRateDropDownList(对象 selectedVatRate = null)
{
var vatRateQuery = 来自 db.VatRate 中的 v
select v;
ViewBag.VatRateID = new SelectList(vatRateQuery, "VatRateID", "VatRateDescription", selectedVatRate;
}
'
我是 MVC 的新手,但是我一直在尝试在具有 List<> 类型模型的视图中使用下拉列表。这样做的原因是在单个页面上创建多个记录。
我已经能够成功地创建一个非 List<> 类型的视图并且一次只能创建一条记录,但是当我使用List<> 类型的模型。
型号
public class Product
{
public int ProductID { get; set; }
public string Description { get; set; }
public int VatRateID { get; set; }
[ForeignKey("VatRateID")]
public virtual VatRate VatRate { get; set; }
}
控制器
// GET: /Product/Bulkdata
public ActionResult BulkData()
{
PopulateVatRateDropDownList();
List<Product> model = new List<Product>();
model.Add(new Product
{
ProductID = 0,
Description = "",
VatRateID = 1
}
);
return View(model);
}
//
// POST: /Product/Bulkdata
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult BulkData(
[Bind(Include = "Description,VatRateID")]
List<Product> products)
{
try
{
if (ModelState.IsValid)
{
foreach (var p in products)
{
db.Product.Add(p);
}
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DataException)
{
ModelState.AddModelError("", "Bulk - Unable to save changes, Try again, and if the probelm persists contact your administrator");
}
PopulateVatRateDropDownList();
return View(products);
}
private void PopulateVatRateDropDownList(object selectedVatRate = null)
{
var vatRateQuery = from v in db.VatRate
select v;
ViewBag.VatRateID = new SelectList(vatRateQuery, "VatRateID", "VatRateDescription", selectedVatRate);
}
查看
@if (Model != null && Model.Count > 0)
{
int j = 0;
foreach (var i in Model)
{
<tr style="border:1px solid black">
<td>
@Html.EditorFor(m => m[j].Description)
@Html.ValidationMessageFor(m => m[j].Description)
</td>
<td>
@Html.DropDownList("VatRateID", String.Empty)
@Html.ValidationMessageFor(m => m[j].VatRateID)
</td>
<td>
@if (j > 0)
{
<a href="#" class="remove">Remove</a>
}
</td>
</tr>
j++;
}
}
当我 运行 使用此代码的应用程序时,0 总是返回到 vatRateID。除了上述之外,我还尝试了许多其他解决方案,包括 ASP.NET MVC DropDownListFor with model of type List<string>。正如我所提到的,我是 mvc 的新手,所以我知道我可能缺少一些简单的东西。任何帮助将不胜感激。
谢谢
斯蒂芬在评论中回答:
在视图中,根据 Stephen 评论中的文章将 foreach 更改为 for 循环并使用 DropdDownListFor
@Html.DropDownListFor(m => m[i].VatRateID, (IEnumerable<SelectListItem>)ViewBag.VatRateList)
还修改了控制器以将 ViewBag 属性 重命名为 VatRateList
' private void PopulateVatRateDropDownList(对象 selectedVatRate = null) { var vatRateQuery = 来自 db.VatRate 中的 v select v; ViewBag.VatRateID = new SelectList(vatRateQuery, "VatRateID", "VatRateDescription", selectedVatRate; } '