2010-08-18 51 views
0

我想模仿webforms多視圖功能,我能想到的唯一方法是將PartialView放入ViewData對象中?像下面這樣:您可以將PartialView放入ViewData對象嗎?

查看代碼:

<%= ViewData["PartialViewPlaceholder"] %> 

控制器代碼:

if(//condition){  
    ViewData["PartialViewPlaceholder"] = partialView1; 
} else { 
    ViewData["PartialViewPlaceholder"] = partialView2; 
} 

你怎麼會去嗎?

回答

1

ViewData旨在包含實際的數據,而不是查看其本身,其中包含標記和呈現代碼。這豈不是能爲你做到這一點:

public ActionResult MyActionMethod() 
{ 
    var model = new MyModel(); 
    model.UsePartialView1 = false; // Tell the view not to use Partial View 1 
    return View("MyView", model); 
}  

並在視圖MyView

<% if (Model.UsePartialView1) 
     Html.RenderPartial("PartialView1", Model); 
    else 
     Html.RenderPartial("PartialView2", Model); %> 

,這會使得無論是使用取決於由控制器設定的條件相同型號PartialView1PartialView2

或者,從你的控制器返回一個局部視圖模型直接,而不是一個普通視圖,你可以這樣做:

public ActionResult MyActionMethod() 
{ 
    var model = ... 
    ViewData["MyViewData"] = ... 
    return PartialView("PartialView1", model); 
} 

這將直接返回局部視圖PartialView1到客戶端。這在AJAX場景中最爲有用,因爲結果很可能不是整個HTML頁面。部分視圖是.ascx文件。

+0

理想情況下,我需要通過控制器來控制呈現的PartielView。如何做到這一點? – shahidaltaf 2010-08-18 16:27:14

+0

@ shahid81你爲什麼需要這樣做?你的場景是什麼?只要控制器是決定是否符合「條件」的控制器,您仍然可以使用我描述的方法控制通過控制器*渲染的部分視圖*。 – bzlm 2010-08-18 16:28:27

+0

我有一個小表格,有很多結果,不同的確認屏幕,但我不想要不同的URL。就像webforms使用Multiviews一樣。 – shahidaltaf 2010-08-18 16:32:30

相關問題