Asp.net mvc 如何为经常使用的剑道控件制作Razor模板?

Asp.net mvc 如何为经常使用的剑道控件制作Razor模板?,asp.net-mvc,kendo-ui,telerik,Asp.net Mvc,Kendo Ui,Telerik,我有一个Razor MVC网页,大量使用剑道图表/网格 其中一些网格和图表可以在多个位置找到,重要的是外观和感觉是相同的 现在,通过在视图之间复制.cshtml,我已经很好地重用了我的后端代码 有了这项技术,我确实获得了很好的后端代码重用,但是重用图表会很棒,这可能吗 我可以把这段代码放到它自己的.cshtml文件中,然后从多个位置引用它吗?也许是剃刀版的#include?: @(Html.Kendo().Chart<AuthTest.Models.HardDriveUsagePieSl

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

其中一些网格和图表可以在多个位置找到,重要的是外观和感觉是相同的

现在,通过在视图之间复制.cshtml,我已经很好地重用了我的后端代码

有了这项技术,我确实获得了很好的后端代码重用,但是重用图表会很棒,这可能吗

我可以把这段代码放到它自己的.cshtml文件中,然后从多个位置引用它吗?也许是剃刀版的#include?:

 @(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)
                  )
@(Html.Kendo().Chart().Theme(“统一”)
.Name(“chart”+s.Key.ToString()).Title(Title=>Title.Position(charttTitlePosition.Bottom))
.Legend(Legend=>Legend
.可见(假)
)
.系列(系列=>
{
饼图(model=>model.Percent,model=>model.Title)
.标签(标签=>标签
.Template(“#=类别:#=值#%”)
.背景(“透明”)
.可见(真实)
).StartAngle(150);
})
.DataSource(x=>x.Read(r=>r.Action(“_Usage”,“Home”,new{ID=s.Value.ID,UID=Model.UID})))
.工具提示(工具提示=>工具提示
.可见(真实)
.Format(“{0}%”)
).转换(错误)
)

我所做的是创建一个返回剑道网格的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);
}
public静态类KendoChartHelper
{
public static Kendo.Mvc.UI.Fluent.ChartBuilder RenderPieSlice(此HtmlHelper帮助程序,字符串chartName,int-uid,int-id)
其中T:AuthTest.Models.HardDriveUsagePieSicle
{return helper.Kendo().Chart())
.主题(“统一”)
.Name(chartName).Title(Title=>Title.Position(ChartTitlePosition.Bottom))
.Legend(Legend=>Legend
.可见(假)
)
.系列(系列=>
{
饼图(model=>model.Percent,model=>model.Title)
.标签(标签=>标签
.Template(“#=类别:#=值#%”)
.背景(“透明”)
.可见(真实)
).StartAngle(150);
})
.DataSource(x=>x.Read(r=>r.Action(“_Usage”,“Home”,new{ID=ID,UID=UID})))
.工具提示(工具提示=>工具提示
.可见(真实)
.Format(“{0}%”)
).转换(假);
}
然后在cshtml文件中,您可以这样调用它:

 @(Html.RenderPieSlice<AuthTest.Models.HardDriveUsagePieSlice>("MyPieSliceName",s.Value.Id, Model.UID))
@(Html.RenderPieSlice(“MyPieSiceName”,s.Value.Id,Model.UID))
我还没有测试过这个精确的代码,但它应该(有点)正确。我希望这有帮助。祝你好运