2012-05-04 9 views
1

私は比較的新しいASPとMVCですが、これまでのところOKです。私はDBの最初のアプローチを使用していると私のDBテーブルをすべてのセットアップ(それはFKsなどでクリーンアップされた既存のDB)です。ASP.net MVCはパーシャルを使って関連オブジェクトを作成します

IはFKSのルートを持っている:

Contact 
    - LettingContact 
     - Landlord   
     - Tenant 

Iは、データ、例えばを表示するパーシャルを使用できるようにしたいと思い/ Contact/_Createは連絡先情報(Title、Forename、Surname)を保持し、/ Contact/Createおよび/ Tenant/Createの両方で使用されます。パーシャルを使用せず、Tenant/Create htmlフォームのフィールドを使用して、モデルから関連するデータを表示するだけで、それを実現できました。テナントに/私は、次のやったコントローラで作成し、私は送信ボタンをクリックしたときに

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 

される(以下を行うには、私がnullの部分で例外を取得停止しました)私の/テナント/ポストイベントの作成に行きます。 tenant.LettingContact.Contact.ContactIDクラッシュを読み込む行がLettingsContactへとNullReferenceExceptionがnullになるしかし

[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");    
    } 
} 

。部分モデルがモデルを維持していない理由は何ですか?

また、これを行うより良い方法がある場合は、私にはこれがまだとても新しいのでお知らせください。

私はパーシャルを使用したい理由は、それがjQueryのモーダルフォームでフォームを再利用するために私を可能にすることであるなど

+0

が必要なの詳細ですか?おかげで – Dudedolf

+0

テナントの引数とテナントのプロパティを混同します。 – Kramer

答えて

1

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

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

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

+0

ありがとう、私は別の(よりエレガントではない)方法を見つけましたが、次回のためにこれを試します:) – Dudedolf

関連する問題