2013-07-04 2 views
0

보기에서 내 링크와 관련하여 일부 쿼리 링 작성에 도움이되는 클래스를 인스턴스화하는 방법이 필요하며 정적으로 요구하는이 메서드를 사용할 수 없습니다. 메서드를 사용하면 querystringbuilder가 응용 프로그램의 전체 수명 동안 데이터를 유지하게되므로 (일부 심각한 문제가 발생할 수 있음)도우미 클래스를 인스턴스화하지만보기가 아님

내 질문에 사람들은 어떻게 인스턴스화 할 수 있습니까? 내가 필요로하지만 실제보기 자체가 아닌 클래스/객체? 밖으로 내보기 전에이 일을 내보기에

@MyInstantiatedObject.DoStuff() 

:

@{ 
    var MyInstantiatedObject = new MyClass() 

} 

내가 할

는 SO .. 내가 좋아하는 뭔가를 할 수 있다는 어쨌든이 간단한 질문을 유지 일부 얻을 방법을 어디에 개체를 instansiate 할 필요가 있지만 내 질문에 가능한 다른 방법으로 그것을 할 수있는 경우 (일부 web.config handel .. 또는 일부 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); 
} 

당신은 또한 당신의 컨트롤러 또는 이와 같은 컨트롤러 증축에서 사용자 지정 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); 
} 
관련 문제