首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asp.Net Razor的ResolveUrl/ResolveClientUrl等效项?

Asp.Net Razor的ResolveUrl/ResolveClientUrl等效项?
EN

Stack Overflow用户
提问于 2011-02-17 01:59:41
回答 3查看 18.9K关注 0票数 24

所以我已经开始使用Razor语法作为CSS、JScript和图片urls的标准--确实解决了很多问题;而且至少在WebForms和Razor页面之间是一致的(并不是我所有的开发人员都会使用Razor,但他们仍然可以在我开发的这个平台上工作)。

然而,对于我目前正在做的事情,我真的可以使用一种方法来获取在Razor页面中编写的相对Url,并在运行时将其解析为正确的服务器端文件,然后再将其转换回客户端的绝对Url。Url.Content不对相对Urls做任何事情。

所以,基本上,我想要一个剃刀级别的ResolveUrlResolveClientUrl的等价物。

我希望这样可以在我的一些MVC视图中启用更简洁(并且更能容忍重命名)的资源路径,这些路径可以是离根目录更远的几个文件夹,并且其内容文件夹将更容易表示为相对路径-因此我可以:

folder\folder\views\shared\layout.cshtml

folder\folder\content\site.css

(我还推断了布局页面的使用,以反映ResolveUrl所解决的问题以及WebForms所做的基础重建)

使用Url.Content时,我需要指定完整路径:

Url.Content("~/folder/folder/content/site.css")

但我想要的是

Url.Content("../../site.css")

当然,无论当前请求的路由中有多少条路径,都要让它正常工作。

当然,如果我抛弃了Url.Content调用,仅仅依靠url rebasing,我就可以在WebForms中实现这一点。

在Razor中有没有类似的东西?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-17 20:58:28

您可以尝试使用WebPageRenderingBase.Href方法,如下所示

代码语言:javascript
复制
@Href("../../site.css")
票数 36
EN

Stack Overflow用户

发布于 2013-10-07 03:12:49

如果您正在逐步转换ASP.NET应用程序ASP.NET MVC,您可以使用包装器:

代码语言:javascript
复制
public abstract class ResolveClientUrlWrapper
{
    public abstract string ResolveClientUrl(string relativeUrl);
}

public class ResolveClientUrlPageWrapper : ResolveClientUrlWrapper
{
    System.Web.UI.Page _page;

    public ResolveClientUrlPageWrapper(System.Web.UI.Page page)
    {
            _page = page;
    }

    public override string ResolveClientUrl(string relativeUrl)
    {
        return _page.ResolveClientUrl(relativeUrl);
    }
}

public class ResolveClientUrlPWebPageRenderingBaseWrapper : ResolveClientUrlWrapper
{
    WebPageRenderingBase _webPageRenderingBase;

    public ResolveClientUrlPWebPageRenderingBaseWrapper(WebPageRenderingBase webPageRenderingBase)
    {
        _webPageRenderingBase = webPageRenderingBase;
    }

    public override string ResolveClientUrl(string relativeUrl)
    {
        return _webPageRenderingBase.Href(relativeUrl);
    }
}

public class ResolveClientUrlUrlHelperWrapper : ResolveClientUrlWrapper
{
    UrlHelper _urlHelper;

    public ResolveClientUrlUrlHelperWrapper(UrlHelper urlHelper)
    {
        _urlHelper = urlHelper;
    }

    public override string ResolveClientUrl(string relativeUrl)
    {
        return _urlHelper.Content(relativeUrl);
    }
}

public class PathUtilityWrapper : ResolveClientUrlWrapper
{
    public override string ResolveClientUrl(string relativeUrl)
    {
        return VirtualPathUtility.ToAbsolute(relativeUrl);
    }
}

你可以从经典的ASP.NET页面进行ResolveClientUrlPageWrapper,或者从ASP.NET MVC控制器进行ResolveClientUrlHttpServerUtilityBaseWrapper,从ASP.NET MVC视图进行ResolveClientUrlUrlHelperWrapper。您将在整个ASP.NET经典和ASP.NET MVC应用程序中拥有相同的背景代码。

票数 1
EN

Stack Overflow用户

发布于 2015-09-24 22:42:47

我通常在我的javascript代码中这样做。

代码语言:javascript
复制
var imgUrl = '@Href("~/images/calendar.png")'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5020240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档