エンティティタイプの2つのリストが含まれていますが、Status
プロパティの値によってのみ区別されます。 Orders
が作成されると、statusプロパティはIn Progress
とAdminOrders view
に自動的に設定され、Orders In Progress table
に配置されます。 AdminOrders view
にはOrders In Progress table
とOrders Dispatched table
の2つのテーブルがあり、それぞれModel
のリストで埋められます。それにモデルを渡す - 新規受注のStatus
値がdispatched
にドロップダウンリストから変更され、ビュー内のupdate
ボタンがクリックされたときに、POSTリクエストがトリガされなければならない変更されたフォーム入力値からエンティティを更新するポストメソッドでモデルが渡されない
。しかし、私がAdminOrders
メソッドをデバッグすると、modelパラメータはnullになります。
は、こちらのモデルクラスです:これらは、コントローラのアクションです
public class AdminOrdersViewModel
{
public List<Order> OrdersInProgress { get; set; }
public List<Order> OrdersDespatched { get; set; }
}
:Get
要求AdminOrders
方法で
[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);
}
、各モデルリストのエンティティが更新され、新しいモデルがに与えられていますビューが返されたときに表示するので、ステータスプロパティに応じてページが更新され、注文が正しいテーブルに移動されます。ただし、モデルはnullのままです。私もモデルのリストを個別形式で割り当てられたとPostメソッドに二つの新しいリストを渡すことを試みた
@using (Html.BeginForm("AdminOrders", "Manage", new { model = Model }, FormMethod.Post, new
{
enctype = "multipart/form-data"
}))
{
}
:
ビューのフォームは、POSTメソッドモデルパラメータにビューのモデルを割り当て要求しますが、エラーを受け取ります。投稿のリクエストが更新されたモデルを投稿メソッドAdminOrders
に渡すようにするにはどうすればよいですか?
フルビューページのコードは以下の通りです:
@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