我嘗試添加使用彈出內部PartialView的對象。這是一個簡單的租賃應用程序,其數據模型生成模型First至Entity Framework。控制員和視圖大部分由EF腳手架。 RentalApplication和RentalObject之間的關係是1對多,這意味着RentalObject總是必須有1個RentalApplication。提交表單沒有對所有的數據帶來
我的控制器看起來是這樣的:
// GET: /Calendar/Add/1
// Create a PartialView using a RentalObject as the model.
// Use the provided ID to lock in the RentalApplication.
[HttpGet]
public PartialViewResult Add(int id)
{
return PartialView(
new RentalObject(db.RentalApplicationSet.FirstOrDefault(x => x.Id == id)));
}
// POST: /Calendar/Add
// Save the submitted RentalObject to the db
[HttpPost]
public ActionResult Add(RentalObject rentalobject)
{
if (ModelState.IsValid)
{
try
{
db.RentalObjectSet.Add(rentalobject);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
return View();
}
我的目標是這樣的:
public partial class RentalObject
{
public RentalObject()
{
this.Lease = new HashSet<Lease>();
}
public RentalObject(RentalApplication rentapp)
{
this.Lease = new HashSet<Lease>();
RentalApplication = rentapp;
PricePerHour = RentalApplication.DefaultPricePerHour;
Currency = RentalApplication.DefaultCurrency;
}
public int Id { get; set; }
public string Name { get; set; }
public bool IsAvailable { get; set; }
public string Illustration { get; set; }
public string Description { get; set; }
public decimal PricePerHour { get; set; }
public string Currency { get; set; }
public virtual ICollection<Lease> Lease { get; set; }
public virtual RentalApplication RentalApplication { get; set; }
}
所以,當我打開彈出窗口(使用@ Ajax.ActionLink拿到第一控制器添加行動)我創建一個RentalObject與RentalApplication(第二構造函數)用作模型。目前爲止,彈出式對話框顯示了RentalApplication中的PricePerHour和Currency值。
然而,當我在PartialView彈出提交表單一切都被複制,但RentalApplication對象。它以某種方式最終使用原始的RentalApplication中的PricePerHour和Currency創建一個新的RentalObject對象,但不包含RentalApplication屬性下的對象本身。我的調試器甚至會轉到RentalObject的第一個構造函數。
所以我想從控制器提交時查看(GET),並返回到控制器(POST)它有麻煩保持一個複雜對象的另一個對象中。這對我來說只是一個糟糕的做法嗎?我應該使用ViewModel嗎?
你渲染'RentalApplication'任何控制在你看來讓他們回來後?是的它會使用第一(無參數)構造函數 - 這是怎麼了'ModelBinder'作品 - 它使用反射來初始化這需要一個參數的構造函數一個新的實例(事實上,如果你刪除它,它會拋出一個異常) – 2014-12-03 23:43:07