实例化一个辅助类但不在视图中

时间:2013-07-04 09:27:37

标签: asp.net-mvc razor instantiation helper

我需要一种方法来实例化一个应该帮助我构建一些查询字符串的类,当它涉及我在视图中的链接时,我不能使用我需要的这些方法作为静态方法,因为这会导致查询字符串构建器在应用程序的整个生命周期内保存数据(这会导致一些严重的问题)

所以我的问题是你们的, 有可能某些人能够实例化我需要的类/对象而不是实际的视图本身吗?

所以要保持简单的问题..无论如何,我可以做类似的事情:

@MyInstantiatedObject.DoStuff()

在我看来,在我看来之前没有这样做:

@{
    var MyInstantiatedObject = new MyClass()

}

我确实知道我需要如何实现对象,但我的问题是它是否有可能以其他方式执行(比如告诉web.config将它放到handel it..or使用一些app_code @帮助魔法或其他东西)

提前致谢!

1 个答案:

答案 0 :(得分:1)

你想要实现的目标违背了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);
}

您还可以在Controller或Controller 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);
}