我正在尝试在kendo UI网格中应用“过滤器”,在该网格中,如果ViewModel的属性为true,则显示带有链接地址的单元格的值,如果为false,则仅显示不带地址的值。该网格的viewModel具有一个名为IsRecorded的属性,该属性用作前面解释的过滤器。
但是由于某些原因,当我运行项目并进入Kendo Grid所在的模块时,我仍然收到以下错误:
System.NullReferenceException:'对象引用未设置为对象的实例。'
System.Web.Mvc.WebViewPage.Model.get返回null。
这是我的剑道.cshtml
@(Html.Kendo().Grid<PersonReportViewModel>()
.Name("Report")
.Columns(columns =>
{
columns.Bound(m => m.Name)
.HeaderHtmlAttributes(new { @class = "Name" }).HtmlAttributes(new { @class = "Name" });
if (Model.IsRecorded)
{
columns.Bound(m => m.Id)
.HeaderHtmlAttributes(new { @class = "Id" }).HtmlAttributes(new { @class = "Id" })
.ClientTemplate("<a href=\"SomeAdress"</a>");
}
else
{
columns.Bound(m => m.Id)
.HeaderHtmlAttributes(new { @class = "Id" }).HtmlAttributes(new { @class = "Id" });
};
在if条件下,我是否使用Model类访问了它?奇怪的是使用模型时。它向我显示了视图模型具有的所有属性,就像它正在正确访问它但返回null一样。条件执行也完全正确吗?
感谢您的回答。
Model.IsRecorded将查看页面模型,而不是网格模型(PersonReportViewModel)。 here显示了几种实现方法。我会使用ClientTemplate:
columns.Template(t => {}).ClientTemplate(
"# if (IsRecorded) {#"
+ "<a href=\'SomeAdress'</a>"
+ "# } else { #"
+ @"<span>#=JobId#</span>"
+ "# } #")
.HeaderHtmlAttributes(new { @class = "Id" })
.HtmlAttributes(new { @class = "Id" })
.Title("Job Id");
如果缺少诸如#
或{
之类的错误,则会发生控制台错误。