KendoUI,你可以在Template()或ClientTemplate()中调用C#方法吗?

时间:2015-02-10 18:41:25

标签: c# asp.net-mvc razor kendo-ui kendo-grid

我需要生成一个URL,以便在我使用Kendo网格创建的表格中显示。问题是必须从模型ID生成此URL。例如:

string aUrl = Url.GenerateUrl(person.Id);

然而,将剑道网格用作以下内容是非常棘手的:

...Kendo()
.Grid<Person>()
.Name("gridPeople")
.Columns(columns =>
{
   columns.Bound(p => p.Name);
   columns.Bound(p => Url.GenerateUrl(p.Id));
})
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("ReadPeople", "Person"))
)

会导致错误:

bound columns require a field or property access expression

我不确定如何实现这一点。我试过了:

columns.Bound(p => p.Id).ClientTemplate(@Url.GenerateUrl("#: Id #"))

columns.Bound(p => p.Id).ClientTemplate("@Url.GenerateUrl(#: Id #)")
但是没有工作。第二个接近,但打印文本&#34; @ Url.Generate(XXXX-SOME-IDNO)&#34;从模型中正确填充了ID。但我希望它打印该函数的结果,而不是打印出实际的编程语句:(

2 个答案:

答案 0 :(得分:1)

检查第一种方法是否存在语法错误&#34;错误地放置了。

columns.Bound(p => p.Id).ClientTemplate(@Url.GenerateUrl("#: Id #"))

其次,你可以尝试调用一个jquery函数来传递Id,函数返回生成的URL。

答案 1 :(得分:1)

我相信Url.GeneralUrl仅在呈现页面时被评估一次,因为您正在使用AJAX作为数据源。因此,您的客户端模板是调用Url.GenerateUrl(“#:Id#”)的结果,我不知道该客户端模板会是什么,但听起来它不适合您。

相反,尝试将网址添加到网格模型并填充服务器端(您的控制器可以创建UrlHelper,如果您不知道如何进行互联网搜索)。

另外,当您已经在C#上下文中时,不需要使用'@'符号来写出C#代码。所以它会是

ng-controller

而不是

columns.Bound(p => p.Id).ClientTemplate(Url.GenerateUrl("#: Id #"))