aspx の世界に由来する MVC を理解するのに苦労しています。
というモデルがありCustomerGarment
ます。これには、いくつかの衣服Order
とCustomer
一緒に と があります。
public class CustomerGarment
{
public int CustomerGarmentId { get; set; }
public virtual Customer Customer { get; set; }
public virtual Order Order { get; set; }
public virtual GarmentJacket GarmentJacket { get; set; }
public virtual GarmentShirt GarmentShirt { get; set; }
}
get と post のメソッドがあります。ページが読み込まれると、新しいCustomerGarment
インスタンスが作成され、データベースにクエリを実行して Customer 変数と Order 変数が入力されます。GarmentJacket
次に、viewbag を使用してとGarmentShirt
のリストを画面に表示します
ページが表示され、ビューを使用してモデルに完全にアクセスできます。ビューバッグの内容がドロップダウンにロードされ、渡したモデルを使用してすべての Customer 変数と Order 変数にアクセスできます。
次に直面する問題は、HttpPost を使用するときです。モデルは、渡した情報とともに返されません。
public ActionResult AddGarments(int orderId, int customerId)
{
CustomerGarment cg = new CustomerGarment();
cg.Order = (from a in db.Orders where a.OrderId == orderId select a).FirstOrDefault();
cg.Customer = (from a in db.Customers where a.CustomerId == customerId select a).FirstOrDefault();
var jackets = from a in db.GarmentJackets orderby a.Type, a.SleeveLengthInches, a.ChestSizeInches select a;
var shirts= from a in db.GarmentKilts orderby a.PrimarySize, a.DropLength select a;
ViewBag.GarmentJacket = new SelectList(jackets, "GarmentJacketId", "GarmentJacketId");
ViewBag.GarmentShirt = new SelectList(shirts, "GarmentShirtId", "GarmentShirtId");
return View(cg);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddGarments(CustomerGarment cg)
{
// Here, I do not have the customer info for example
db.CustomerGarments.Add(cg);
db.SaveChanges();
return RedirectToAction("Index");
return View(cg);
}
これは私の見解の一部です
@Html.HiddenFor(model => model.Order.OrderId)
@Html.HiddenFor(model => model.Order.CustomerId)
<div class="display-field">
@Html.DisplayFor(model => model.Customer.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.GarmentJacket, "Jacket")
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.GarmentJacket, (SelectList)ViewBag.GarmentJacket, new {style="width:312px;height:30px;margin-top:2px;margin-bottom:5px"})
</div>
編集
私のガーメント ジャケット モデル
public class GarmentJacket : Garment
{
public int GarmentJacketId { get; set; }
[Required]
public string Type { get; set; }
[Required]
[Display(Name = "Chest Size")]
public int ChestSizeInches { get; set; }
[Required]
[Display(Name = "Sleeve Length")]
public int SleeveLengthInches { get; set; }
}
public class Garment
{
[DataType(DataType.Date)]
public DateTime? DateRetired { get; set; }
[Required]
public string Barcode { get; set; }
[Required]
public bool Adults { get; set; }
}