我有一個大的實體(組織),我已經將一些字段分成單獨的視圖,其中包含多個ViewModel的較小字段子集。如果用戶稍後需要更新這些字段,我也想使用這些相同的視圖。如何使用視圖模型從視圖編輯
我很困惑我該如何填充數據。例如,我(可能愚蠢)認爲,如果我使用整個實體填充Get,那麼字段將自動填充 - 就像我使用與整個實體關聯的編輯視圖一樣。
有人可以告訴我,ViewModels不應該用這種方式,或者如果我只是沒有想到明顯的東西?
這是我目前的獲取/發佈基於我(可能很差)的假設。 CompanyInfo是Organization內部字段的子集。這給了我令人沮喪的「動態代理」錯誤。
// GET: /Organization/CompanyInfo
public ActionResult CompanyInfo(ManageMessageId? message)
{
ViewBag.StatusMessage =
message == ManageMessageId.ConfirmEmail ? "Please confirm your email address to log in again." : "";
var member = GetUserMember();
var org = db.Organizations.Single(x => x.OrgId == member.OrgId);
return View(org);
}
//
// POST: /Organization/CompanyInfo
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> CompanyInfo(CompanyInfoViewModel model)
{
if (ModelState.IsValid)
{
var member = GetUserMember();
var org = await db.Organizations.SingleAsync(x => x.OrgId == member.OrgId);
org.StreetAddress = model.StreetAddress;
org.Suite = model.Suite;
org.City = model.City;
org.State = model.State;
org.Zip = model.Zip;
org.Country = model.Country;
db.Entry(org).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("CompanyInfo", "Organization");
}
return View();
}
Your CompanyInfo操作應該返回CompanyInfoViewModel而不是db實體本身。您應該使用您的組織數據來創建此虛擬機並將其返回查看。您的發佈操作看起來很好。 –