2013-03-01 224 views
24

我正在構建一個配置文件頁面,其中會包含一些與特定模型(租戶)相關的部分 - AboutMe,MyPreferences - 這些類型的東西。這些部分中的每一個都將成爲局部視圖,以允許使用AJAX進行局部頁面更新。MVC 4 - 如何將模型數據傳遞給部分視圖?

當我在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> 

如果我在_TenantDetailsPartial包裹DIV裏面的代碼在@if(model != null){}裏面沒有任何東西顯示在頁面上,所以我猜測有一個空的模型被傳遞給視圖。

當我從'ActionResult'創建一個強類型視圖時,'session'中的用戶傳遞給了視圖,怎麼會這樣?如何在'會話'中將用戶傳遞給不是從ActionResult創建的部分視圖?如果我錯過了這個概念,請解釋一下。

回答

53

實際上並沒有將模型傳遞給Partial,而是傳遞了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> 
+4

我真的試過了更早,它沒有工作!我不能重建我的解決方案......謝謝,它的工作原理。 – MattSull 2013-03-01 00:28:02

10

而且,這樣可以使它的工作原理:

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

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

有關的RenderPartial和MVC類似HTML傭工更多信息,請參閱this popular StackOverflow thread

4

將模型數據傳遞到局部視圖的三種方法(可能有m個礦)

這是視圖頁面

方法一填充在視圖

@{  
    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); 
} 

方法二 穿越ViewBag

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

法三 穿過模型

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

enter image description here

+0

你可以請把部分視圖代碼以及。我沒有得到任何東西,當使用第二種方法來傳遞值的局部視圖 – 2017-04-07 13:19:45

+0

@HeemanshuBhalla我認爲var countries = ViewBag.CountryList爲List 可以給你的值 – 2017-04-07 14:52:30

相關問題