我需要生成一个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。但我希望它打印该函数的结果,而不是打印出实际的编程语句:(
答案 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 #"))