Я довольно новичок в 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, поэтому я знаю, что, возможно, что-то простое, что мне не хватает. Любая помощь была бы чрезвычайно оценена.
Благодаря
Вы не можете использовать цикл 'foreach'. См. [Этот ответ] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943) –
И ваше использование 'DropDownList()' не имеет смысла - его привязка к 'VatRateID', но вы модель' List 'и' List 'не содержит свойства с именем' VatRateID'. Вы также исключаете все из привязки, используя атрибут '[Bind]'. –
Спасибо Стивен, не могли бы вы привести пример того, как я должен использовать DropDownList() в приведенном выше – user2046411