在HTML助手中生成URL

14 浏览
0 Comments

从上述内容中,我们可以看到这个问题的出现原因是因为在使用ASP.NET 4.5时出现了重入问题,认为UrlHelper不能在HTTP请求之间重用。

解决方法是通过创建一个扩展方法,获取HtmlHelper的UrlHelper实例,并在需要使用UrlHelper的地方调用这个扩展方法。

下面是整理后的

在ASP.NET中,有时我们需要在HTML助手(HtmlHelper)中生成URL。在ASP.NET 4.5中,我们发现了一个问题,即在处理HTTP请求时出现了重入问题。我们怀疑这个问题与UrlHelper的重用有关。

为了解决这个问题,我们创建了一个扩展方法,用于获取HtmlHelper的UrlHelper实例。这个扩展方法如下所示(代码见上方):

public static partial class UrlHelperExtensions
{
    /// 
    /// Gets UrlHelper for the HtmlHelper.
    /// 
    /// The HTML helper.
    /// 
    public static UrlHelper UrlHelper(this HtmlHelper htmlHelper)
    {
        if (htmlHelper.ViewContext.Controller is Controller)
            return ((Controller)htmlHelper.ViewContext.Controller).Url;
        const string itemKey = "HtmlHelper_UrlHelper";
        if (htmlHelper.ViewContext.HttpContext.Items[itemKey] == null)
            htmlHelper.ViewContext.HttpContext.Items[itemKey] = new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection);
        return (UrlHelper)htmlHelper.ViewContext.HttpContext.Items[itemKey];
    }
}

通过使用这个扩展方法,我们可以在需要生成URL的地方调用`UrlHelper()`方法,如下所示:

public static MvcHtmlString RenderManagePrintLink(this HtmlHelper helper, )
{    
    var url = htmlHelper.UrlHelper().RouteUrl('routeName');
    //...
}

这种方法的优点在于它重用了现有的对象,而不是创建一个新的对象。这样可以避免重入问题的发生。

因此,通过创建一个扩展方法来获取HtmlHelper的UrlHelper实例,我们解决了在ASP.NET 4.5中出现的重入问题。

0
0 Comments

问题出现的原因是想要在HTML帮助器中生成URL。解决方法是使用UrlHelper公共静态类来生成URL,而不是创建新的UrlHelper类。这种方法的优势是可以设置RouteCollection。下面是一个示例代码:

UrlHelper.GenerateUrl(null, actionName, controllerName, null, null, null, routeValues, htmlHelper.RouteCollection, htmlHelper.ViewContext.RequestContext, true)

通过以上方法,我们可以很方便地在HTML帮助器中生成URL。

0
0 Comments

问题:Generate URL in HTML helper的出现原因和解决方法

原因:

问题的出现是因为在创建URL Helper时,只使用了一个参数来初始化UrlHelper对象。该参数是ViewContext.RequestContext,这个参数用于创建UrlHelper对象所需的上下文信息,包括当前请求的路由数据。然而,在初始化UrlHelper对象时,没有同时初始化RouteCollection,这可能会导致一些问题,例如在生成URL时可能无法正确地找到正确的路由。

解决方法:

为了解决这个问题,可以在初始化UrlHelper对象时,使用一个额外的参数来初始化RouteCollection。这样,UrlHelper对象将可以正确地访问和使用当前应用程序的路由集合,以生成正确的URL。

下面是解决方法的示例代码:

var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection);
var url = urlHelper.Action("Home", "Index");

通过使用上述代码,我们可以确保UrlHelper对象在生成URL时可以正确地访问和使用当前应用程序的路由集合,从而避免由于缺少RouteCollection而导致的问题。这样,我们就可以正确地生成URL了。

0