首页 > 解决方案 > 如何正确访问 .cshtml 中条件的 ViewModel 属性

问题描述

我正在尝试在剑道 UI 网格中应用“过滤器”,如果 ViewModel 的属性为 true,则显示带有链接地址的单元格的值,如果为 false,则只显示没有地址的值。viewModel 用于这个网格有一个名为 IsRecorded 的属性,它用作前面解释的过滤器。

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

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 类访问它是否错误?奇怪的部分是在使用模型时。它向我展示了 viewmodel 具有的所有属性,就像它正确访问它但它返回 null 一样。条件执行也完全正确吗?

感谢您的回答。

标签: .netasp.net-mvckendo-uikendo-gridasp.net-mvc-viewmodel

解决方案


Model.IsRecorded 将查看页面模型,而不是网格模型 (PersonReportViewModel)。这里展示了几种实现这一目标的方法。我会使用 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");

如果您有诸如丢失#{.


推荐阅读