web-dev-qa-db-ja.com

MVC 4-モデルデータを部分ビューに渡す方法

特定のモデル(テナント)-AboutMe、MyPreferences-これらの種類に関連するいくつかのセクションを持つプロファイルページを作成しています。これらのセクションはそれぞれ、AJAXを使用した部分的なページ更新を可能にするための部分的なビューになります。

TenantControllerでActionResultをクリックすると、厳密に型指定されたビューを作成でき、モデルデータがビューに正常に渡されます。部分ビューではこれを達成できません。

部分ビュー__TenantDetailsPartial_を作成しました:

_@model LetLord.Models.Tenant
<div class="row-fluid">
    @Html.LabelFor(x => x.UserName) // this displays UserName when not in IF
    @Html.DisplayFor(x => x.UserName) // this displays nothing
</div>
_

次に、上記の部分ビューをレンダリングするビューMyProfileを用意します。

_@model LetLord.Models.Tenant
<div class="row-fluid">
    <div class="span4 well-border">
         @Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", 
         new ViewDataDictionary<LetLord.Models.Tenant>())
    </div>
</div>
_

DIV内のコードを@if(model != null){}内の__TenantDetailsPartial_でラップすると、ページに何も表示されないため、ビューに渡される空のモデルがあると推測します。

ActionResultから厳密に型指定されたビューを作成すると、「セッション」のユーザーがビューに渡されるのはなぜですか? 「セッション」でユーザーをActionResultから作成されていない部分ビューに渡すにはどうすればよいですか?コンセプトについて何か足りない場合は、説明してください。

30
MattSull

実際にモデルをパーシャルに渡すのではなく、new ViewDataDictionary<LetLord.Models.Tenant>()を渡します。これを試して:

@model LetLord.Models.Tenant
<div class="row-fluid">
    <div class="span4 well-border">
         @Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", Model)
    </div>
</div>
60
Daniel Imms

また、これにより動作する可能性があります。

@{
Html.RenderPartial("your view", your_model, ViewData);
}

または

@{
Html.RenderPartial("your view", your_model);
}

MVCのRenderPartialおよび同様のHTMLヘルパーの詳細については、 この人気のStackOverflowスレッド を参照してください。

12
lzlstyle

モデルデータを部分ビューに渡す3つの方法(もっとあるかもしれません)

これは表示ページです

方法1ビューで生成

@{    
    PartialViewTestSOl.Models.CountryModel ctry1 = new PartialViewTestSOl.Models.CountryModel();
    ctry1.CountryName="India";
    ctry1.ID=1;    

    PartialViewTestSOl.Models.CountryModel ctry2 = new PartialViewTestSOl.Models.CountryModel();
    ctry2.CountryName="Africa";
    ctry2.ID=2;

    List<PartialViewTestSOl.Models.CountryModel> CountryList = new List<PartialViewTestSOl.Models.CountryModel>();
    CountryList.Add(ctry1);
    CountryList.Add(ctry2);    

}

@{
    Html.RenderPartial("~/Views/PartialViewTest.cshtml",CountryList );
}

メソッド2パススルーViewBag

@{
    var country = (List<PartialViewTestSOl.Models.CountryModel>)ViewBag.CountryList;
    Html.RenderPartial("~/Views/PartialViewTest.cshtml",country );
}

メソッド3パススルーモデル

@{
    Html.RenderPartial("~/Views/PartialViewTest.cshtml",Model.country );
}

enter image description here

5
Arun Prasad E S