2011-03-07 100 views
0

我覺得這很愚蠢,但我似乎無法在頁面中獲得局部視圖渲染。填充局部視圖

我創建了一個局部視圖,即時試圖加載到我的索引頁面。我已經調用了我的pv _BusinessDetails,基本上它是一個返回一些客戶數據的視圖。

我的PV看起來像

@model MyMVC.Models.BusinessModel 
<div class="grid"> 

<div class="grid-header"> 
<div class="gh-l"></div> 
    <div class="gh-m">Business Details</div> 
<div class="gh-r"></div> 
</div> 

<div class="grid-row"> 
    <label class="labelBold">Busines Name</label> 
    <label>@Model.BusinesName</label> 
</div> 

</div> 

從我的索引頁我想打電話給使用

@Html.Partial("_BusinessDetails") 

其失敗,所以如果我添加

@Html.Partial("_BusinessDetails",new MyMVC.Models.BusinessModel()) 

局部視圖光伏但是由於控制器沒有被擊中,因此沒有數據。在我的控制器中,我試過了

public ActionResult _BusinessDetails() 
    { 
     return PartialView("_BusinessDetails"); 
    } 

public PartialViewResult _BusinessDetails() 
    { 
     return PartialView("_BusinessDetails"); 
    } 

但是他們都沒有被擊中。我做錯了什麼?

回答

2

當渲染局部視圖並傳遞視圖模型時,該視圖模型應該已經被填充。使用@Html.Partial()時,不會調用控制器/操作方法。

既然您在您的主頁上使用了這種強類型的局部視圖,請考慮在您的HomeControllerIndex()方法中構建其視圖模型。你的索引頁也是強類型的嗎?如果是這樣,您可以將您的分視圖的視圖模型添加爲索引頁視圖模型的屬性,並在調用@Html.Partial()時傳遞該視圖模型。

在您的索引頁,它看起來是這樣的:

@model MyMVC.Models.IndexViewModel 
<!-- some HTML here --> 
@Html.RenderPartial("_BusinessDetails", Model.BusinessModel) 

如果你的索引頁不強類型,你可以使用ViewBag對象或者您可以在強類型MyMVC.Models.BusinessModel和使用@Html.RenderPartial("_BusinessDetails", Model) (雖然很簡單,但可能會導致混淆)。

Rachel Appel有一個不錯的blog post,如Mike Brind,如果你想了解更多信息。

0

這很棘手。我已經成功使用在主視圖作爲容器對象的模型:

class MainPageModel { 
    public BusinessDetailModel BusinessDetails { get; set; } 
    // ... 
} 

,然後剛好路過整個模型像@Html.Partial("_BusinessDetails", Model)我的部分景色。

0

當你寫了這個,

@Html.Partial("_BusinessDetails",new MyMVC.Models.BusinessModel()) 

中的數據不會加載你的模型是空的,所以傳遞模型商業模式之前,之前填充它。