mvc带有类型列表模型的下拉列表

时间:2016-05-03 11:32:16

标签: c# asp.net-mvc dropdownlistfor

我对MVC很新,但我一直在尝试在视图中使用下拉列表,该视图具有List<>类型的模型。这样做的原因是在一个页面上创建多个记录。

我能够成功创建一个不属于List<>类型的视图并且一次只有一条记录,但是当我使用List<>类型的模型实现视图时,尽管有大量的Google搜索无法实现解决方案。

模型

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的新手,所以我知道可能有一些我想念的简单。任何帮助都将非常感激。

由于

1 个答案:

答案 0 :(得分:0)

斯蒂芬在评论中回答:

在视图中,根据Stephen评论中的文章将foreach更改为for循环并使用DropdDownListFor

@Html.DropDownListFor(m => m[i].VatRateID, (IEnumerable<SelectListItem>)ViewBag.VatRateList)

还修改了控制器以将ViewBag属性重命名为VatRateList

&#39;         private void PopulateVatRateDropDownList(object selectedVatRate = null)         {             var vatRateQuery =来自db.VatRate中的v                                选择v;             ViewBag.VatRateID = new SelectList(vatRateQuery,&#34; VatRateID&#34;,&#34; VatRateDescription&#34;,selectedVatRate);         } &#39;