如何正确访问.cshtml中条件的ViewModel属性

问题描述 投票:0回答:1

我正在尝试在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一样。条件执行也完全正确吗?

感谢您的回答。

.net asp.net-mvc kendo-ui kendo-grid asp.net-mvc-viewmodel
1个回答
0
投票

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");

如果缺少诸如#{之类的错误,则会发生控制台错误。

© www.soinside.com 2019 - 2024. All rights reserved.