我的模型包含兩個Order
實體類型列表,但僅區分Status
屬性的值。當創建Orders
時,狀態屬性會自動設置爲In Progress
,並在AdminOrders view
中放置在Orders In Progress table
中。 AdminOrders view
有兩個表:Orders In Progress table
和Orders Dispatched table
,它們將分別填寫Model
的列表。模型沒有在post方法中傳遞,它應該從已更改的表單輸入值更新實體
當新訂單Status
值從下拉列表改爲dispatched
,並在視圖中update
單擊按鈕時,發佈請求應被觸發 - 模型傳遞給它。但是,當我調試AdminOrders
post方法時,模型參數爲空。
這裏的模型類:
public class AdminOrdersViewModel
{
public List<Order> OrdersInProgress { get; set; }
public List<Order> OrdersDespatched { get; set; }
}
這些控制器動作:
[HttpGet]
[Authorize(Roles = "Admin")]
public ActionResult AdminOrders()
{
var model = db.Orders.Where(o => o.Status == "In Progress").ToList();
var model2 = db.Orders.Where(o => o.Status == "Despatched").ToList();
return View(new AdminOrdersViewModel { OrdersInProgress = model, OrdersDespatched = model2 });
}
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<ActionResult> AdminOrders([Bind(Include = "OrdersInProgress, OrdersDespatched")] AdminOrdersViewModel model)
{
if (ModelState.IsValid)
{
foreach (var item in model.OrdersDespatched)
{
db.Entry(item).State = EntityState.Modified;
}
foreach (var item2 in model.OrdersInProgress)
{
db.Entry(item2).State = EntityState.Modified;
}
await db.SaveChangesAsync();
var ordersInProgress = db.Orders.Where(o => o.Status == "In Progress").ToList();
var ordersDespatched = db.Orders.Where(o => o.Status == "Despatched").ToList();
return View(new AdminOrdersViewModel { OrdersDespatched = ordersDespatched, OrdersInProgress = ordersInProgress });
}
return View(model);
}
在Get
要求AdminOrders
方法,每個型號列表的實體被更新,新的模式是提供給查看何時返回視圖,因此頁面應該更新並且根據狀態屬性將訂單移動到正確的表格。但是模型留空。
在視圖形式分配視圖的模型Post方法模型參數:
@using (Html.BeginForm("AdminOrders", "Manage", new { model = Model }, FormMethod.Post, new
{
enctype = "multipart/form-data"
}))
{
}
我也試圖在兩個新的列表來傳遞Post方法與模型的列表的形式單獨分配請求,但接收錯誤。我如何確保Post請求將更新的模型傳遞給AdminOrders
post方法?
完整視圖頁面代碼如下:
@model ValueVille.Models.AdminOrdersViewModel
@{
ViewBag.Title = "Orders";
}
<div class="main-content-container">
<h1>New Orders In Progress</h1>
@using (Html.BeginForm("AdminOrders", "Manage", new { model = Model }, FormMethod.Post, new
{
enctype = "multipart/form-data"
}))
{
@Html.AntiForgeryToken()
<table class="panel panel-default table cart-table">
<tr>
<th>
Order ID
</th>
<th>
Total
</th>
<th>
Date
</th>
<th>
Status
</th>
</tr>
@foreach (var item in Model.OrdersInProgress)
{
<tr>
<td>
<a href="@Url.Action("OrderDetails", "Home", new { id = item.OrderId })">
@item.OrderId
</a>
</td>
<td>
£@item.Total
</td>
<td>
@item.OrderDate
</td>
<td>
@{
List<SelectListItem> listItems = new List<SelectListItem>();
listItems.Add(new SelectListItem
{
Text = item.Status,
Value = "Option1"
});
listItems.Add(new SelectListItem
{
Text = "Despatched",
Value = "Option2",
});
}
@Html.DropDownListFor(m => item.Status, listItems, item.Status)
</td>
</tr>
}
</table>
<h1>Orders Despatched</h1>
<table class="panel panel-default table cart-table">
<tr>
<th>
Order ID
</th>
<th>
Total
</th>
<th>
Date
</th>
<th>
Status
</th>
</tr>
@foreach (var item in Model.OrdersDespatched)
{
<tr>
<td>
<a href="@Url.Action("OrderDetails", "Home", new { id = item.OrderId })">
@item.OrderId
</a>
</td>
<td>
£@item.Total
</td>
<td>
@item.OrderDate
</td>
<td>
@{
List<SelectListItem> listItems = new List<SelectListItem>();
listItems.Add(new SelectListItem
{
Text = item.Status,
Value = "Option1"
});
listItems.Add(new SelectListItem
{
Text = "Despatched",
Value = "Option2",
});
}
@Html.DropDownListFor(m => item.Status, listItems)
</td>
</tr>
}
</table>
<div class="panel-body form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Update" class="btn btn-success" />
</div>
</div>
}
</div>
當您嘗試單獨傳遞列表時會得到什麼錯誤? –
另外,你的下拉列表是什麼樣的?他們的名字是什麼? –
我已更新問題以包含完整視圖頁面代碼。當單獨傳遞列表時,沒有錯誤,但在發佈請求中傳遞的列表是空的 - 因此ModelState是無效的。 – naz786