1

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

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

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

@MyInstantiatedObject.DoStuff()

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

@{
    var MyInstantiatedObject = new MyClass()

}

我确实知道我在某些地方需要如何实例化对象,但我的问题是是否可以以其他方式执行它(比如告诉 web.config 处理它..或使用一些 app_code @helper 魔术或某物)

提前致谢!

4

1 回答 1

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);
}
于 2013-07-04T20:12:07.723 回答