我有一个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)
)
答案 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))
我没有测试过这个确切的代码,但它应该(有些)正确。我希望这有帮助。祝你好运!