2012-06-10 47 views
0

我有一個MVC3項目和一個庫(.dll)項目包括我的一些代碼,所以我需要在庫項目中獲取區域,控制器和操作名稱,我使用在MVC項目下面幾行:在庫項目中獲取操作,控制器和區域名稱

string areaName = (string)Request.RequestContext.RouteData.DataTokens["area"] ?? "Root"; 
string controllerName = (string)Request.RequestContext.RouteData.Values["controller"]; 
string actionName = (string)Request.RequestContext.RouteData.Values["action"]; 

但在庫項目我還沒到Request對象的任何訪問,無論是當我添加using System.Web.Mvc;

public static void GetNames(){ 

    //string areaName = (string)Request.RequestContext.RouteData.DataTokens["area"] ?? "Root"; 
    //string controllerName = (string)Request.RequestContext.RouteData.Values["controller"]; 
    //string actionName = (string)Request.RequestContext.RouteData.Values["action"]; 

} 

所以,我怎樣才能在圖書館項目這個名字?

回答

6

最好的方法是將它們作爲參數傳遞,而不是讓類庫讀取它們,因爲通過這種方式,您可以將類庫與Web應用程序緊密耦合。

但是,如果你堅持要他們,你將不得不使用HttpContext.Current,我不建議:

var context = new HttpContextWrapper(HttpContext.Current); 
var rd = context.Request.RequestContext.RouteData; 
string controller = rd.GetRequiredString("controller"); 
string action = rd.GetRequiredString("action"); 
+1

好了,但如何面積?我使用'string area = rd.Values [「area」]作爲字符串;'和'string area = rd.GetRequiredString(「area」);'它們都沒有工作。 – Saeid

+1

'rd.Values [「area」] as string' should be working。如果它沒有返回,那是因爲你不在一個區域內。 –

+0

我以爲像你一樣,但我在mvc項目和庫中嘗試它,在mvc中返回我正確的值,但是在庫中總是返回null,你有什麼想法嗎? – Saeid

相關問題