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

How to correctly access the ViewModel properties for a condition in a .cshtml

我正在尝试在 kendo UI 网格中应用 "filter",如果 ViewModel 的 属性 为真,则显示单元格的值使用 link 地址,如果为 false,则只显示没有 address.The 的值 此网格的 viewModel 有一个名为 IsRecorded 的 属性,它用作前面解释的过滤器。

但由于某种原因,当我 运行 项目并进入 Kendo 网格所在的模块时,我不断收到以下错误:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

System.Web.Mvc.WebViewPage.Model.get 返回空值。

这是我的 kendo .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条件下用模型class访问错了?奇怪的是,当使用 Model.它向我展示了 viewmodel 的所有属性,就像它正确访问它但返回 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");

如果您有缺少 #{.

等错误,将会出现控制台错误