1

私は ASP と MVC に比較的慣れていませんが、これまでのところ問題ありません。私はDBファーストのアプローチを使用しており、DBテーブルをすべてセットアップしています(FKなどでクリーンアップされた既存のDBです)。

私はFKのルートを持っています:

Contact
    - LettingContact
         - Landlord          
         - Tenant

パーシャルを使用してデータを表示できるようにしたいと考えています。たとえば、/Contact/_Create は連絡先情報、つまり役職、名、姓を保持し、/Contact/Create と /Tenant/Create の両方で使用されます。パーシャルを使用せずに、Tenant/Create html フォームのフィールドを使用して、モデルから関連データを表示するだけで機能させることができました。コントローラーのテナント/作成に対して、次のことを行いました(次のことを行うと、部分的にnull例外が発生しなくなりました)

Tenant tenant = new Tenant();
LettingsContact lettingsContact = new LettingsContact();
Contact contact = new Contact();
tenant.LettingsContact = letContact;
tenant.LettingsContact.Contact = contact;
return View(tenant)

今、ビューは

//using Html.BeginForm etc

@{
   Html.RenderPartial("../Contact/_Create", Model.LettingsContact.Contact);
   Html.RenderPartial("_Create", Model);
}


<input type="submit" value="create">

//rest of html

送信ボタンをクリックすると、/Tenant/Create 投稿イベントに移動します。

[HttpPost]
public ActionResult Create(Tenant  tenant)
{
     if (ModelState.IsValue)
     {
         tenant.ContactID = Guid.NewGuid();
         tenant.LettingsContact.Contact.ContactID = tenant.ContactID;
         db.Tenants.AddObject(tenant);
         db.SaveChanges();
         return RedirectToAction("Index");             
     }
}

ただし、tenant.LettingContact.Contact.ContactIDクラッシュを読み取る行は、LettingsContact に対する NullReferenceException が null になります。パーシャルがモデルを維持していない理由は何ですか?

また、これを行うためのより良い方法があれば、これは私にとってまだ非常に新しいのでお知らせください。

パーシャルを使用する理由は、フォームを jQuery モーダル フォームなどで再利用できるようにするためです。

4

1 に答える 1

1

ページに表示したくない情報をフォームにポストバックする場合は、非表示フィールドを使用する必要があります。を見てHtml.Hidden()くださいHtml.HiddenFor()

msdnに非表示:http://msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.hidden.aspx

msdnのHiddenFor:http: //msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.hiddenfor.aspx

于 2012-07-08T08:44:13.327 に答える