如何为常用的Kendo控件制作Razor模板?

时间:2014-08-03 18:42:02

标签: asp.net-mvc kendo-ui telerik

我有一个Razor MVC网页,大量使用剑道图表/网格。

其中一些网格和图表位于多个位置,外观和感觉相同非常重要

现在我通过在视图之间复制.cshtml来重复使用我的后端代码

使用这种技术,我确实获得了良好的后端代码重用,但重用图表真是太棒了,这可能吗?

我可以以某种方式将此代码放入其自己的.cshtml文件中,然后从多个位置引用它吗?也许是#include的Razor版本? :S

 @(Html.Kendo().Chart<AuthTest.Models.HardDriveUsagePieSlice>().Theme("Uniform")
                  .Name("chart" + s.Key.ToString()).Title(title => title.Position(ChartTitlePosition.Bottom))
                  .Legend(legend => legend
                      .Visible(false)
                  )
                  .Series(series =>
                  {
                      series.Pie(model => model.Percent, model => model.Title)

                          .Labels(labels => labels
                              .Template("#= category #: #= value#%")
                              .Background("transparent")
                              .Visible(true)
                          ).StartAngle(150);
                  })
                  .DataSource(x => x.Read(r => r.Action("_Usage", "Home", new {ID=s.Value.Id, UID=Model.UID})))
                  .Tooltip(tooltip => tooltip
                        .Visible(true)
                        .Format("{0}%")
                  ).Transitions(false)
                  )

1 个答案:

答案 0 :(得分:2)

我所做的是创建一个返回kendo网格的html帮助器。您的助手只是一个常规扩展,可以像这样编写:

public static class KendoChartHelper
{
    public static Kendo.Mvc.UI.Fluent.ChartBuilder<T> RenderPieSlice<T>(this HtmlHelper helper, string chartName, int uid, int id)
        where T : AuthTest.Models.HardDriveUsagePieSlice
    {return helper.Kendo().Chart<T>()
              .Theme("Uniform")
              .Name(chartName).Title(title => title.Position(ChartTitlePosition.Bottom))
              .Legend(legend => legend
                  .Visible(false)
              )
              .Series(series =>
              {
                  series.Pie(model => model.Percent, model => model.Title)

                      .Labels(labels => labels
                          .Template("#= category #: #= value#%")
                          .Background("transparent")
                          .Visible(true)
                      ).StartAngle(150);
              })
              .DataSource(x => x.Read(r => r.Action("_Usage", "Home", new {ID = id, UID = uid})))
              .Tooltip(tooltip => tooltip
                    .Visible(true)
                    .Format("{0}%")
              ).Transitions(false);
}

然后在你的cshtml文件中,你可以像这样调用它:

 @(Html.RenderPieSlice<AuthTest.Models.HardDriveUsagePieSlice>("MyPieSliceName",s.Value.Id, Model.UID))

我没有测试过这个确切的代码,但它应该(有些)正确。我希望这有帮助。祝你好运!