編輯 - 的要求,本所認爲...使用實體框架在POST上獲取錯誤 - 值不能爲空。參數名:源
--start編輯
@model salesWebTest.viewModel.vwbooking
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.bookings.bookingid)
@Html.EditorFor(model => model.bookings.name)
@foreach (var item in Model.traces)
{
@Html.EditorFor(m => item.contact_Name)
}
}
--end編輯
--start原來的問題 我有一個視圖模型包含兩個班...
public class vwbooking
{
public booking bookings { get; set; }
public IEnumerable<trace> traces { get; set; }
}
預訂和跟蹤是一個EDMX實體。
我想用一次保存來更新這兩個類中的數據。
這是我已經試過......
public ActionResult Edit(vwbooking vwbooking)
{
if (ModelState.IsValid)
{
db.bookings.Attach(vwbooking.bookings);
db.Entry(vwbooking.bookings).State = EntityState.Modified;
vwbooking.traces.ToList().ForEach(//THE ERROR OCCURS HERE
t =>
{
db.traces.Attach(t);
db.Entry(t).State = EntityState.Modified;
});
db.SaveChanges();
}
}
如果我刪除的痕跡部分,預訂部分將正確更新。
這是GET方法...
public ActionResult Edit(int id = 0)
{
booking booking = db.bookings.Find(id);
var viewModel = new vwbooking();
viewModel.bookings = booking;
viewModel.traces = (from l in db.traces where l.bookingid == booking.bookingid select l);
return View(viewModel);
}
這是我的數據庫上下文類
public class salesContext : DbContext
{
public salesContext() : base()
{
Configuration.LazyLoadingEnabled = true;
}
public salesContext(string Connection) : base(Connection)
{
Configuration.LazyLoadingEnabled = true;
}
public DbSet<booking> bookings { get; set; }
public DbSet<trace> traces { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<booking>().HasKey(e => e.bookingid);
modelBuilder.Entity<trace>().HasKey(e => e.traceid);
}
}
看來'vwbooking.traces'爲空。 –
正確 - 它是 - 但爲什麼?有3個項目顯示在頁面上,我知道db中有3個項目。儘管他們沒有通過,即使vwbooking.bookings是。 – tintyethan
你是如何在視圖中顯示它的?當你回帖時,是否在帖子旁邊?如果不嘗試使用Html.DisplayFor或Html.HiddenFor將其添加到視圖。這樣它必須回傳。 – jannagy02