2016-05-03 5 views
0

Я довольно новичок в MVC, но я пытаюсь использовать раскрывающийся список в представлении, которое имеет модель типа List <>. Причиной этого является создание нескольких записей на одной странице.mvc Выпадающий список с моделью типа

Я смог успешно создать представление, которое не относится к типу 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, поэтому я знаю, что, возможно, что-то простое, что мне не хватает. Любая помощь была бы чрезвычайно оценена.

Благодаря

+0

Вы не можете использовать цикл 'foreach'. См. [Этот ответ] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943) –

+0

И ваше использование 'DropDownList()' не имеет смысла - его привязка к 'VatRateID', но вы модель' List 'и' List 'не содержит свойства с именем' VatRateID'. Вы также исключаете все из привязки, используя атрибут '[Bind]'. –

+0

Спасибо Стивен, не могли бы вы привести пример того, как я должен использовать DropDownList() в приведенном выше – user2046411

ответ

0

Ответил Стефаном в комментариях:

В представлении, изменил Еогеасп к для цикла согласно статье в комментарии Стефана и использовали DropdDownListFor

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

Также изменен контроллер, чтобы переименовать свойство ViewBag в VatRateList

' private void PopulateVatRateDropDownList (выделенный объектVatRate = null) { var vatRateQuery = from v in db.VatRate select v; ViewBag.VatRateID = новый SelectList (vatRateQuery, "VatRateID", "VatRateDescription", selectedVatRate); } '