如何在Orchard中找到资源

Car*_*arl 6 asp.net asp.net-mvc resources orchardcms asp.net-mvc-3

我正在写一个Orchard主题,我希望能够找到一些与主题一起打包的资源(图像/ swfs等).

这样做的最佳方式是什么?

我已经看过ResourceManifest文件,使用builder.Add.DefineResource,但我似乎无法在视图中找到它的对应物.或者我只是把完整的路径?

任何提示?

干杯卡尔

Pio*_*myd 6

如果需要定义新资源(脚本或样式表):

  1. 创建一个继承IResourceManifestProvider的类
  2. 提供void BuildManifests(ResourceManifestBuilder构建器)方法和
  3. 通过添加所有必要的资源builder.Add().DefineStyle( "")builder.Add().DefineScript(...),就像你在你的问题指出.

例如:

public class ResourceManifest : IResourceManifestProvider {
    public void BuildManifests(ResourceManifestBuilder builder) {
        var manifest = builder.Add();
        manifest.DefineStyle("MyStyle").SetUrl("mystyle.css");
        manifest.DefineScript("MyScript").SetUrl("myscript.js").SetDependencies("jQuery");
    }
}
Run Code Online (Sandbox Code Playgroud)

这定义了一个可以在视图中重用的样式和脚本.网址与您所在的主题/模块中的/ Styles(或/ Scripts)文件夹相关.

如果您想重用已经定义的一些资源(在所有已启用的模块和主题中),那么就像编写一样简单:

...
@{
    Style.Require("MyStyle").AtHead();
    Script.Require("MyScript").AtFoot();
}
...
Run Code Online (Sandbox Code Playgroud)

在你的.cshtml视图文件中.上面的例子会在适当的位置注入mystyle.cssmyscript.js(最后一页的页眉/页脚).


Ada*_*son 5

我为同样的问题打了一个扩展方法:

public static string ResourceUrl(this HtmlHelper helper, string resourceType, string resourceName)
{
    var manager = helper.Resolve<IResourceManager>();
    var settings = new RequireSettings { Type = resourceType, Name = resourceName, BasePath = resourceType };
    var resource = manager.FindResource(settings);
    var context = new ResourceRequiredContext { Resource = resource, Settings = settings };

    var url = context.GetResourceUrl(settings, "/");

    return url;
}
Run Code Online (Sandbox Code Playgroud)

资源清单定义:

manifest.DefineResource("Content", "MyImage").SetUrl("Content/myimage.png");
Run Code Online (Sandbox Code Playgroud)

查看用法:

@Html.ResourceUrl("Content", "MyImage")
Run Code Online (Sandbox Code Playgroud)

它没有经过良好测试,可能会使用一些错误处理,但它适合我.


Ber*_*Roy 2

在样式表中,应使用相对路径(来自样式表路径)。

在视图中,您应该使用 Url.Content。