2010-08-24 21 views
0

我試圖建立一個asp.net MVC應用程序將使用的URL,如:asp.net的MVC是如何決定查看加載

/控制器/ [編號] /動作/身份證

我有它總是叫我控制器,並將它傳遞的NumberId罰款... 不過現在我想回到取決於Number 了不同的看法,我可以有這樣的選擇:

if([Number] == 1) { return View("ViewName");} 
if([Number] == 2) { return View("ViewName2");} 

但是我反而在想,如果有改變的核心,這樣,而不是在~/Views/controller/action.aspx搜索我可以有我自己的方法,它的確在Number然後傳遞到虛擬文件提供一些檢查的方式是不同的路徑

希望這是有道理的!

回答

0

你可能想看看用動作過濾器屬性來裝飾你的控制器方法。

然後,您可以在Action Filter Attribute中做一些特殊的事情。或者,您可以將Number傳遞給Model對象,然後讓模型Object返回正確的View視圖路徑。無論哪種方式,試圖將太多邏輯放在控制器外面的本能都是合理的,尤其是如果[數字]在某種程度上是商業問題而不是視圖問題。

+0

嗨你是什麼意思action屬性?數字將是一個數據庫查找...我打算從數據庫加載視圖取決於行動和[編號] – 2010-08-24 14:16:04

+0

對不起,它是動作過濾器屬性。在這裏閱讀關於它們的內容:http://www.asp.net/mvc/tutorials/understanding-action-filters-cs 您可以在Action Filter Attribute方法中完全訪問Context。 你應該可以做任何事情。我過去在那裏的一個對象層次上完成了自定義安全。雖然,這可能是你的情況矯枉過正,但值得一看。 – CubanX 2010-08-24 14:46:44

0

根據輸入參數決定要加載哪個視圖是控制器任務。你可以編寫你自己的視圖引擎。

但是,將完整路徑返回到您要返回的視圖更容易。

return View("~/myviews/ViewName3.aspx"); 

這將渲染來自給定目錄的ViewName3。

0

您需要查看/ google創建自定義視圖引擎。

通過聲音您可能只想擴展內置的WebFormViewEngine,只是覆蓋位置和.FindView()方法。

HTHS,
查爾斯

+0

嗨 試過,但問題是,我不只是改變搜索路徑,但從數據庫中加載視圖...如何從字符串創建一個IView ... – 2010-08-25 05:11:24

+0

呃??你沒有提到有關從數據庫加載視圖的任何內容......事實上,你說過「我可以有自己的方法,它對數字進行了一些檢查,然後傳遞給虛擬文件提供程序是一個不同的路徑」,但現在你正在改變你的曲調,你想從數據庫中獲得它? – Charlino 2010-08-25 05:39:40