Я новичок в 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 с моделью типа List‹string›. Как я уже упоминал, я новичок в mvc, поэтому я знаю, что, вероятно, мне не хватает чего-то простого. Любая помощь будет очень признательна.
Спасибо
foreach
. См. этот ответ - person   schedule 03.05.2016DropDownList()
не имеет смысла - его привязка кVatRateID
, но ваша модельList<Product>
, аList<T>
не содержит свойства с именемVatRateID
. Вы также исключаете все из привязки, используя атрибут[Bind]
. - person   schedule 03.05.2016for(int i = 0; i < Model.Count; i++) { @Html.DropDownListFor(m => m[i].VatRateID, (IEnumerable<SelectListItem>)ViewBag.VatRateList) .... }
, и измените свойствоViewBag
наVatRateList
(оно не может совпадать со свойством, к которому вы привязаны). И удалите атрибут[Bind]
- person   schedule 05.05.2016