作成機能を正しく動作させることに問題があります。 SalesPersonとCustomerオブジェクトを持つOrderオブジェクトを作成しようとしています。私は、次のしている私のコントローラでMVC例外を返すページを作成します。
public class OrderViewModel
{
private sunburstdb db = new sunburstdb();
public Order originalOrder { get; set; }
public IList<SelectListItem> SalesPeopleList { get; set; }
public IList<SelectListItem> CustomersList { get; set; }
public IList<SelectListItem> OrderStatusList { get; set; }
public OrderViewModel(Order order)
{
originalOrder = order;
}
}
:
//
// GET: /Order/Create
public ActionResult Create()
{
Order order = new Order();
OrderViewModel viewModel = new OrderViewModel(order);
//IList<SelectListItem> result = new List<SelectListItem>();
viewModel.SalesPeopleList = new List<SelectListItem>();
foreach (SalesPerson person in db.SalesPeople)
{
var temp = new SelectListItem();
temp.Text = person.FullName;
temp.Value = person.ID.ToString();
viewModel.SalesPeopleList.Add(temp);
}
//viewModel.SalesPeopleList = new SelectList(result);
//result.Clear();
viewModel.CustomersList = new List<SelectListItem>();
foreach (Customer person in db.Customers)
{
var temp = new SelectListItem();
temp.Text = person.FullName;
temp.Value = person.ID.ToString();
viewModel.CustomersList.Add(temp);
}
//viewModel.CustomersList = new SelectList(result);
return View(viewModel);
}
//
// POST: /Order/Create
[HttpPost]
public ActionResult Create(Order order)
{
if (ModelState.IsValid)
{
db.Orders.Add(order);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(order);
}
最後に私の見解は、夫婦とかなり標準である私の次のモデルは、私は、ビューモデルを作成し
public class Order
{
public int ID { get; set; }
public SalesPerson SalesPerson { get; set; }
public bool PreviousWork { get; set; }
public OrderStatus Status { get; set; }
public Customer Customer { get; set; }
public List<OrderLineItem> LineItems { get; set; }
}
のように見えます注文のデータを入力するフィールドの数。
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Order</legend>
<div class="editor-label">
@Html.LabelFor(model => model.originalOrder.SalesPerson)
</div>
<div class="editor-field">
@Html.DropDownList("Order.SalesPerson", Model.SalesPeopleList)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.originalOrder.Customer)
</div>
<div class="editor-field">
@Html.DropDownList("Order.Customer", Model.CustomersList);
</div>
<div class="editor-label">
@Html.LabelFor(model => model.originalOrder.PreviousWork)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.originalOrder.PreviousWork)
@Html.ValidationMessageFor(model => model.originalOrder.PreviousWork)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
私はこれを実行すると、私は次の取得、新しい注文を作成しよう:辞書に渡されたモデルアイテムのタイプが「Models.Order」ですが、しかし、この辞書がモデル」タイプのモデルアイテムが必要です.OrderViewModel '。私はおそらく、私は、このメソッドは、このメソッドのパラメータを変更する必要があると思った:このメソッドは、このオブジェクトに対して定義されたパラメータのないコンストラクタです。誰かが私が間違っていることについてMVCのNoobに何か助けを与えることができますか?
ビューの上部に@model行はありませんか?もしそうなら、それを編集して追加してください。 –
はい、@モデルがあり、私はビューファイル全体を含んでいませんでした。 – azorr
Orderオブジェクト内のすべてのカスタムオブジェクトを、参照されるオブジェクトのIDを保持するint値に変更することによって、これを機能させる方法を理解しました。次に、OrderViewModelで、私はOrderControllerのIDで参照される実際のオブジェクトを設定します。 – azorr