在ASP.NET MVC中使用自定义变量值SASS

时间:2015-06-02 10:28:50

标签: asp.net-mvc sass bundletransformer

this topic的回答中展示了如何使用BundleTransformer为LESS和LessTranslator将变量传递给LESS文件。不幸的是在SASS类的BundleTransformer中没有属性GlobalVariables。是否可以使用自定义变量(颜色值)编译SASS文件取决于登录用户?

2 个答案:

答案 0 :(得分:1)

我没有使用SASS扩展,所以我不能肯定地说,但你总是可以创建一个自定义包变换来替换本质上是一个'模板'文件。

所以你可以有一个SASS文件,变量声明如此

$variable: {{variable-placeholder}};

然后使用类似于以下的内容来替换值。

public class ReplacePlaceholdersBundleTransform : IBundleTransform
{
    private readonly IDictionary<string, string> _replacements;

    public ReplacePlaceholdersBundleTransform()
    {
        _replacements = new Dictionary<string, string>();
    }

    public ReplacePlaceholdersBundleTransform(IDictionary<string,string> replacements)
    {
        _replacements = replacements ?? new Dictionary<string,string>();
    }

    public void Process(BundleContext context, BundleResponse response)
    {
        if (_replacements.IsNullOrEmpty())
            return;

        foreach (var replacement in _replacements)
        {
            response.Content = response.Content.Replace(replacement.Key, replacement.Value);
        }
    }
}

要使用它,请将变换添加到捆绑包中。

yourBundle.Transforms.Add(
            new ReplacePlaceholdersBundleTransform(new Dictionary<string, Func<BundleContext, string>>
            {
                {"{{variable-placeholder}}", "red"},
            }));

我们使用了类似的脚本转换功能,在运行时将bundle url注入脚本文件,以获取Optimization框架生成的完整URL。如果在SASS转换发生后执行转换,这可能不适合你,但是,我没有时间启动SASS项目来测试它。

我希望这会有所帮助。

答案 1 :(得分:0)

解决“BundleTransformer.Less inject variables depending on context/request”讨论中描述的类似问题(仅适用于LESS)。即你还必须编写自己的缓存系统实现并使用InjectContentItemTransform类(声明变量需要使用Sass语法)。但与LESS不同,您无法修改变量(仅可用于声明变量)。