大きなエンティティ(組織)があり、いくつかのViewModelを持つフィールドのサブセットが小さい別々のビューにいくつかのフィールドを分割しました。後でこれらのフィールドを更新する必要がある場合は、同じビューを使用したいと思います。ビューモデルを使用してビューから編集する方法
どのようにデータを入力するのか混乱しています。例えば、私は(おそらく愚かなことに)私がEntity全体にGetを実装した場合、フィールド全体が自動的に入力されると思っていました。つまり、エンティティ全体に関連付けられた編集ビューを使用しているかのようです。
ViewModelsをこのように使用すべきでない場合、または私が何か明白なことについて考えていない場合は誰かに教えてください。
ここに私の(おそらく貧弱な)仮定に基づいて私の現在のGet/Postがあります。 CompanyInfoは、組織内のフィールドのサブセットです。これは私に不満な "動的なプロキシ"エラーを与えます。 ASP.NET MVCで1 ViewModelにを有する唯一の本当の問題は、あなたがそれをポストバックするときに、状態として、あなただけだ、以来、あなたはプロパティビューによって移入されているかわからないということです
// 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();
}
CompanyInfoアクションは、dbエンティティ自体ではなく、CompanyInfoViewModelを返す必要があります(場合によってはが実際にという複雑な処理を行う必要があります)。このVMを作成して表示するには、組織データを使用する必要があります。あなたの投稿アクションはうまく見えます。 –