Я очень новичок в asp.net mvc, поэтому причиной моего отказа может быть что-то основное, но я не могу найти его после почти дня работы.Неспособность передать данные из представления в действие по Html.BeginForm()
То, что я пытаюсь сделать, это получить отредактированную модель из представления индекса и передать ее второму действию, которое не имеет вида и возвращает возврат RedirectToAction("Index")
в связанном контроллере. В OrdersItemsController
мое действие как следующее:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MarkedShipped(IEnumerable<orders_items> orderItems)
{
if (ModelState.IsValid)
{
foreach (var item in orderItems)
{
unitOfWork.GenericRepository<orders_items>().Update(item);
}
}
return RedirectToAction("Index");
}
И в Index.cshtml, который находится в папке OrdersItems в соображениях, что я сделал это следующим образом:
@model IEnumerable<Project.DataAccess.orders_items>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm("MarkedShipped", "OrdersItems", new { orderItems = Model }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.quantity)
</th>
<th>
@Html.DisplayNameFor(model => model.itemprice)
</th>
<th>
@Html.DisplayNameFor(model => model.trackingnumber)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.quantity)
</td>
<td>
@Html.DisplayFor(modelItem => item.itemprice)
</td>
<td>
@Html.EditorFor(modelItem => item.trackingnumber)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.itemid })
</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="MarkShipped" class="btn btn-default" />
</div>
</div>
}
Моя проблема, я я не могу получить модель из представления с параметром orderItems, я не уверен, что это правильный «синтаксис» для того, что я пытаюсь выполнить; но то, что я получаю для orderItems
, когда вызывается действие, является списком orders_items
с Count = 0
, а не нулевым значением.
Я также проверил, есть ли исключения на уровне приложения, но не получил никакого исключения из Application_Error
в Global.asax
Я застрял в течение дня теперь так если кто-нибудь может указать мне направление, как пройти Model (или «отредактированные данные») к действию для меня, чтобы обновить db, я был бы очень благодарен. Благодарю.
Поместите форму FormMethod.Post в параметры BeginForm. – Neel
Вы не можете использовать цикл 'foreach' - он генерирует повторяющиеся атрибуты' name' без индексаторов, необходимых для привязки к коллекции и дублировать атрибуты id, которые являются недопустимыми html. Вам нужно использовать цикл 'for' (или пользовательский' EditorTemplate' для типа вашей модели). Ваша модель должна быть 'IList', а затем' @for (int i = 0; i m [i] .trackingnumber) ...} ' –
И вы не можете добавить свою модель в качестве параметра маршрута - это сборник, который означает, что привязка не сработает (посмотрите на HTML-код, который генерирует для понимания). И в любом случае, какой смысл добавлять исходную модель в качестве параметра маршрута в любом случае (вы уже знаете, что это такое на сервере). –