没有特定类型的剃刀引擎模板解析

时间:2016-03-16 03:49:33

标签: c# razor razorengine

在没有声明RunCompile()的情况下,有没有办法 typeof(someType) Razor Engine模板?

我想避免使用多种方法:

    public static string EvalueateLineChartModelTemplate(d3LineCharts.LineChartModel model, string cssResourceName, string tempKey)
    {
        string template = StreamEmbeddedResource(cssResourceName);
        string result = Engine.Razor.RunCompile(template, tempKey, typeof(d3LineCharts.LineChartModel), model);
        return result;
    }

    public static string EvalueateAreaChartModelTemplate(d3AreaCharts.AreaChartModel model, string cssResourceName, string tempKey)
    {
        string template = StreamEmbeddedResource(cssResourceName);
        string result = Engine.Razor.RunCompile(template, tempKey, typeof(d3AreaCharts.AreaChartModel), model);
        return result;
    }

如何将这两种方法组合成一个更通用的方法,以便我仍然可以用不同的类型调用它?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以制作如下通用方法:

public static string EvaluateTemplate<T>(T model, string cssResourceName, string tempKey)
{
    string template = StreamEmbeddedResource(cssResourceName);
    string result = Engine.Razor.RunCompile(template, tempKey, typeof(T), model);
    return result;
}

然后,您可以像对待特定类型的版本一样调用泛型方法:

d3LineCharts.LineChartModel lineChartModel = new d3LineCharts.LineChartModel();
string result = EvaluateTemplate(lineChartModel, cssResourceName, tempKey);

答案 1 :(得分:0)

这个怎么样:

public static string EvalueateChartModelTemplate<T>(T model, string cssResourceName, string tempKey)
{
    string template = StreamEmbeddedResource(cssResourceName);
    string result = Engine.Razor.RunCompile(template, tempKey, typeof(T), model);
    return result;
}

您的电话将如下:

var result1 = EvalueateChartModelTemplate<d3LineCharts.LineChartModel>(lineChartModel, lineChartResourceName, lineChartKey);
var result2 = EvalueateChartModelTemplate<d3LineCharts.AreaChartModel>(areaChartModel, areaChartResourceName, areaChartKey);

我在方法调用(<d3XXXCharts.XXXChartModel>部分)中保留了泛型参数,只是为了让你清楚地知道发生了什么,但这当然是多余的,因为编译器可以从模型参数中推断出方法调用。