【问题标题】:Instantiate a helper class but not in view实例化一个助手类但不在视图中
【发布时间】:2013-07-02 05:54:46
【问题描述】:

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

所以我对你们的问题是, 是否有可能实例化我需要但不能在实际视图本身中的类/对象?

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

@MyInstantiatedObject.DoStuff()

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

@{
    var MyInstantiatedObject = new MyClass()

}

我确实知道我在某些地方需要如何实例化对象,但我的问题是是否有可能以其他方式做到这一点(比如告诉 web.config 处理它..或使用一些 app_code @辅助魔法什么的)

提前致谢!

【问题讨论】:

    标签: asp.net-mvc razor instantiation helper


    【解决方案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);
    }
    

    您还可以在控制器或控制器扩展中创建自定义 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多