特定のモデル(テナント)-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
から作成されていない部分ビューに渡すにはどうすればよいですか?コンセプトについて何か足りない場合は、説明してください。
実際にモデルをパーシャルに渡すのではなく、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>
また、これにより動作する可能性があります。
@{
Html.RenderPartial("your view", your_model, ViewData);
}
または
@{
Html.RenderPartial("your view", your_model);
}
MVCのRenderPartialおよび同様のHTMLヘルパーの詳細については、 この人気のStackOverflowスレッド を参照してください。
モデルデータを部分ビューに渡す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 );
}