asp.net-mvc-3 - 在 Razor View 上处理嵌入式资源的正确方法是什么?

标签 asp.net-mvc-3 razor embedded-resource

我正在将一些代码从 ASPX View 引擎迁移到 Razor,但遇到了障碍。

我有这个代码:

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

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

所以我退后了一步,我正在思考这个问题:在 Razor 中获取嵌入式资源的正确方法是什么?

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

这是唯一的方法吗?或者有什么更正确的吗?

最佳答案

不幸的是,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);
    }
}

在您的 Razor View 中:
<link rel="stylesheet" type="text/css" href="@Url.WebResource(typeof(DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector), "DotNetOpenAuth.OpenId.RelyingParty.OpenIdSelector.css")" />

另一种可能性是编写一个自定义 HTTP 处理程序/ Controller ,它将从程序集中读取嵌入的资源,并通过设置正确的内容类型将其流式传输到响应。

关于asp.net-mvc-3 - 在 Razor View 上处理嵌入式资源的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996522/

相关文章:

c# - 理解一行示例代码

jquery - 对所需的智能感知和 js 文件感到困惑

java - 使用 Eclipse 将 HTML 嵌入到 JAR 中

razor - 如何在 ServiceStack 中正确本地化 Razor View

asp.net-mvc - MVC Razor 中的 Foreach 循环计数器

java - 导出时 Java Sound 不支持 IOException markreset

java - 从jar中读取资源文件

c# - ASP.NET MVC3 自定义成员资格提供程序 - 指定的成员资格提供程序名称无效

asp.net-mvc - 将请求重定向到匹配的 Controller

.net - 用于 mvc3 日期格式和日期验证的文本框