0

ビュー内からいくつかのcssとjsを組み合わせて縮小するために、squshitとrejuicerの両方を試しました。これまでのところ運がありません。私がやったことは私が置いたフィルターにあります

#region using
    using System;
    using Castle.MonoRail.Framework;
    using campusMap.Models;
    using MonoRailHelper;
    using Rejuicer;
#endregion

namespace campusMap.Filters
{
    public class scriptFilter : IFilter
    {
        public bool Perform(ExecuteWhen exec, IEngineContext context, IController controller, IControllerContext controllerContext)
        {
            controllerContext.PropertyBag["adminRejuicer_css"] = OnRequest.ForCss("~/Content/css/min/Combined.css").Compact;
            controllerContext.PropertyBag["adminRejuicer_js"] = OnRequest.ForJs("~/Content/js/min/Combined.js");
            //controllerContext.PropertyBag["JavaScriptBundle"] = new JavaScriptBundle();
            return true;
        }
    }
}

次にベースコントローラーで

#region Directives
    using Castle.MonoRail.Framework;
    using campusMap.Services;
    using System.Text.RegularExpressions;
    using System;
    using campusMap.Models;
    using Castle.ActiveRecord;
    using MonoRailHelper;
    using campusMap.Filters;
    using log4net;
    using log4net.Config;
    using System.Text;

#endregion
namespace campusMap.Controllers
{
    [Filter(ExecuteWhen.BeforeAction, typeof(scriptFilter))]
    [Layout("default"), Rescue("generalerror")]
    public abstract class BaseController : MonoRailHelper.HelperBaseController
    {
    }

そして最後に、ビュー内から

    $adminRejuicer_css.File("~/Content/css/admin_styles.css").File("~/Content/js/colorpicker/css/jpicker-1.1.6.min.css")

しかし、何もありません。私がsqushitで基本的に同じことをするが、フィルターでは

    controllerContext.PropertyBag["cssBundle"] = Bundle.Css();

とveiwで

    $cssBundle.Add("~/Content/css/admin_styles.css").Add("~/Content/js/colorpicker/css/jpicker-1.1.6.min.css").Render("~/Content/css/min/admin.css")

今回は、少なくとも2つのスクリプトのタグを出力するだけで、縮小またはバンドルされていませんが、少なくとも何かを実行しています。

これを行う方法についてのアイデアはありますか?ありがとう-ジェレミー

4

2 に答える 2

0

これを Application_OnStart メソッド内の Global.asax.cs ファイルに入れる必要があります。

OnRequest.ForCss("~/Content/css/min/Combined.css")

aspnet Web サイトに global.asax.cs ファイルを追加するこのブログ投稿 (私のものではありません)を参照してください。

于 2012-07-12T21:03:22.757 に答える
0

これがその方法です。これはsqushitを使用していますが、rejucierも同じ方法で行われます。

BaseController.cs

#region Directives 
    using Castle.MonoRail.Framework; 
    using campusMap.Services; 
    using campusMap.Models; 
    using Castle.ActiveRecord; 
    using MonoRailHelper; 
    using campusMap.Filters; 
    //any others you'd need
#endregion 
namespace campusMap.Controllers 
{ 
    [Filter(ExecuteWhen.BeforeAction, typeof(scriptFilter))] 
    [Layout("default"), Rescue("generalerror")] 
    public abstract class BaseController : MonoRailHelper.HelperBaseController 
    { 
        protected ScriptsService ScriptsService = new ScriptsService();
    } 
}

次にフィルターで

scriptFilter.cs

#region using
    using System;
    using Castle.MonoRail.Framework;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
#endregion

namespace campusMap.Filters
{
    public class scriptFilter : IFilter
    {
        protected ScriptsService scriptsService = new ScriptsService();
        public bool Perform(ExecuteWhen exec, IEngineContext context, IController controller, IControllerContext controllerContext)
        {
            controllerContext.PropertyBag["scriptsService"] = scriptsService;
            return true;
        }
    }
}

この時点で、すべてがレンダリングされる各呼び出しにフィルターをアタッチし、アクセスできるようにサービスへの参照をプロパティ バッグに配置していることがわかります。次はサービスですので、アクセスする方法を提供します。

ScriptsService.cs

#region Directives
    using System;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
    using Castle.MonoRail.Framework;
    using campusMap.Filters;

    using SquishIt.Framework;
    using SquishIt.Framework.Css;
    using SquishIt.Framework.JavaScript;
    using System.Security.Cryptography;

#endregion

namespace campusMap.Services
{
    public class ScriptsService
    {
        public static string CalculateMD5Hash(string input)
        {
            // step 1, calculate MD5 hash from input
            MD5 md5 = MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
            byte[] hash = md5.ComputeHash(inputBytes);

            // step 2, convert byte array to hex string
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }
            return sb.ToString();
        }

        public static String Css(string files)
        {
            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/css/";
            String FilePath = path + name + ".css";

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            CSSBundle css = new CSSBundle();     
            foreach (string fl in files.Split(','))
            {
                css.Add(fl);
            }
            return css.ForceRelease().Render(FilePath);
        }
        public static String Js(string files)
        {

            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/js/";
            String FilePath = path + name + ".js" ;

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            JavaScriptBundle js = new JavaScriptBundle();
            foreach (string fl in files.Split(','))
            {
                js.Add(fl);
            }
            return js.ForceRelease().Render(FilePath);
        }
    }
}

このサービスで注目していただきたいのは、ベース名を与えるメソッド引数の md5 ハッシュを呼び出しているということです。

それだ!!..設定が簡単に表示できます。さて、あなたはそれをどのように使用しますか?

someView.vm

//CSS
$scriptsService.Css("~/Content/css/jquery-ui-1.8.19.custom.css,~/Content/css/central_main.css,~/Content/css/map_admin.css,~/Content/css/colorbox.css?")

//JS
$scriptsService.Js("~/Content/js/modernizr-2.0.6/modernizr.min.js,~/Content/js/jquery.defaultvalue.js,~/Content/js/utilities_general.js,~/Content/js/infobox.js,~/Content/js/jquery.ui.map.js")

注意すべきことの 1 つは、キャッシュを手動でクリアすることだけではありません。Squshit はクライアントを壊してくれるので、ファイルに触れる心配はありません。

それだけです。

于 2012-07-16T16:18:33.333 に答える