2013-07-04 32 views
0

我需要一種方法來實例化一個類,這應該幫助我一些查詢字符串構建時,當涉及到我的鏈接在視圖中,我不能使用這種方法,我需要靜態方法,因爲這會導致querystringbuilder在應用程序的整個生命週期保持數據(這會導致一些嚴重的問題)實例化助手類,但不在視圖中

所以我對你們的問題是, 是否有可能一些如何能夠實例化我需要的類/對象,但不在實際視圖本身中?

所以保持這個問題簡單..反正是有,我可以這樣做:

@MyInstantiatedObject.DoStuff() 

在我看來,用了我的觀點之前,這樣做:

@{ 
    var MyInstantiatedObject = new MyClass() 

} 

我做得到我的一些地方,一些如何將需要instan的對象,但我的問題是,如果它可能以其他方式做到這一點(如告訴web.config來處理它..或使用一些app_code @helper魔術或什麼)

提前致謝!

回答

0

你試圖實現的是違背MVC的哲學。如果你想保持動作之間的查詢字符串數據,你可以這樣創建自定義的ActionLink的HTML幫助:

public static MvcHtmlString ActionLinkWithQueryString(this HtmlHelper htmlHelper, 
    string linkText, string actionName) 
{ 
    var routeValueDictionary = new RouteValueDictionary(); 

    return htmlHelper.ActionLinkWithQueryString(linkText, 
     actionName, routeValueDictionary); 
} 

public static MvcHtmlString ActionLinkWithQueryString(this HtmlHelper htmlHelper, 
    string linkText, string actionName, RouteValueDictionary routeValues) 
{ 
    var queryString = HttpContext.Current.Request.QueryString; 

    if (queryString.Count > 0) 
    { 
     foreach (string key in queryString.Keys) 
     { 
      routeValues.Add(key, queryString[key]); 
     } 
    } 

    return htmlHelper.ActionLink(linkText, actionName, routeValues); 
} 

你也可以在你的控制器或在控制器Extention這樣創建自定義RedirectToAction方法:

private RedirectToRouteResult RedirectToActionWithQueryString(string actionName) 
{ 
    var queryString = Request.QueryString; 
    var routeValues = new RouteValueDictionary(); 

    foreach (string key in queryString.Keys) 
    { 
     routeValues.Add(key, queryString[key]); 
    } 

    return RedirectToAction(actionName, routeValues); 
}