在Razor View上处理嵌入式资源的正确方法是什么?

Jos*_*eph 6 embedded-resource razor asp.net-mvc-3

我正在将一些代码从ASPX视图引擎迁移到Razor,我遇到了障碍.

我有这个代码:

<link rel="Stylesheet" type="text/css" href="
    <%=Page.ClientScript.GetWebResourceUrl
        (typeof(DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector), 
        "DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector.css")%>" />
Run Code Online (Sandbox Code Playgroud)

这里的问题是,使用Razor,我没有Page属性.

所以我退后一步,我正在看这个想知道:在Razor中获取嵌入式资源的正确方法是什么?

我花了很多时间试图找到关于这个主题的解决方案,但除了"在帮手中包装一个新的页面"之外,我还没有找到任何其他的东西.

这是唯一的方法吗?还是有更正确的东西?

Dar*_*rov 7

遗憾的是,Web资源与webforms基础架构紧密相关,如果没有它,很难重用它们.所以有点hacky但你可以写一个帮手:

public static class UrlExtensions
{
    public static string WebResource(this UrlHelper urlHelper, Type type, string resourcePath)
    {
        var page = new Page();
        return page.ClientScript.GetWebResourceUrl(type, resourcePath);
    }
}
Run Code Online (Sandbox Code Playgroud)

并在你的剃刀视图中:

<link rel="stylesheet" type="text/css" href="@Url.WebResource(typeof(DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector), "DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector.css")" />
Run Code Online (Sandbox Code Playgroud)

另一种可能性是编写一个自定义HTTP处理程序/控制器,它将从程序集中读取嵌入的资源,并通过设置正确的内容类型将其传递给响应.