2016-03-24 21 views
0

私はAsp.netコアプロジェクトに2つのモデルがあります:Personと住所:一人でのasp.net MVCでの部分図を使用して、1対1の関係

class Person 
{ 
    public int Id {get;set;} 
    public string Name {get;set;} 
    public int? HomeAddressId {get;set;} 
    public Address HomeAddress {get;set;} 
} 

class Address 
{ 
    public int Id {get;set;} 
    public string CityName {get;set;} 
    ... 
} 

を私は含める必要があるビューを作成しますそのための部分的なビューを使用してアドレス属性のフィールド。

要素の名前が人物モデルの正しい属性と一致するように、この部分(または部分)をどのように含めるか?

例:

<input name="HomeAddress.CityName" /> 

このビューは、人以外の他のモデルで使用されるべきであることに留意します。

+0

私はこれに掘られていないが、あなたが潜在的にcustionのDisplayName属性を構築し、それを利用することができます。 https://msdn.microsoft.com/en-us/library/system.componentmodel.displaynameattribute(v=vs.110).aspx –

+0

アドレスビューでは、次の操作を実行できます。@ Html.TextBox( "HomeAddress。 CityName "、Model.CityName)、このようにPersonビュー内から呼び出すことができます:@ Html.Partial(" _ Address "、Model.HomeAddress)。私はあなたの全般的な目標について興味があります。私が書いたことで、あなたはすべての住所が自宅の住所に限定されます。 –

+0

@PapaBurgundy、実際には、モデルにはアドレス属性が1つしかありません(HomeAddressは単なる例です)。 – Beetlejuice

答えて

0

あなたが通過することを可能にする部分ビューを生成するための拡張メソッドを作成することができますモデルの接頭辞、この投稿のように:ASP.MVC 3 Razor Add Model Prefix in the Html.PartialView extension

その後、
public static void RenderPartialWithPrefix(this HtmlHelper helper, string partialViewName, object model, string prefix) 
{ 
    helper.RenderPartial(partialViewName, 
         model, 
         new ViewDataDictionary { 
          TemplateInfo = new System.Web.Mvc.TemplateInfo { 
           HtmlFieldPrefix = prefix 
          } 
         }); 
} 

そして、このようなあなたのメインビューからそれを呼び出す:

@Html.RenderPartialWithPrefix("MyPartialViewName", Model.HomeAddress, "HomeAddress"); 
0

@Beetlejuiceおそらくもっと良い方法がありますが、これは現在役立つかもしれませんか?あなたはそれを試してみて、モデルに縛られているようにしたいと思うでしょう(あなたは剃刀とバリデーションなどを使うことができます)。 ViewBagとModelとの組み合わせでname属性を設定することができます。どちらの方法でも、この一般的な流れはそれを達成することができます。

ビューを呼び出す:

@{ Html.RenderAction("Partial", "Home", new { id = "HomeAddress" }); } 

コントローラー:

Public ActionResult Partial(string id) 
    { 
     return PartialView((object)id); 
    } 

Partial.cshtml

@model string 

@{ 
    string Id = Model + ".Id "; 
    string name = Model + ".CityName"; 
} 

<input type="text" name="@Id" /> 
<input type="text" name="@name" /> 
+0

ハム..私はポイントを得た。期待しているようだ。私はこれに似たものを試しますが、Addressモデルを文字列ではなく部分ビューに渡します。 – Beetlejuice

+0

それは本当に原油の例です。あなたがすでに知っていることと一緒にその流れは、うまくいくものを仕立てるのに十分であるはずです。 –

関連する問題