.net - 如何正确访问 .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 一样。条件执行也完全正确吗?
感谢您的回答。
解决方案
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");
如果您有诸如丢失#
或{
.
推荐阅读
- apache-kafka - Oracle JDBC 源连接器的问题
- highcharts - Highcarts 条形图例符号与标签对齐
- ionic-framework - OpenTok Ionic 3 - 找不到 publisher.cycleVideo 函数
- php - 根据 UID 从 Gmail 获取电子邮件数据
- c# - 如何根据 Windows 窗体中的用户输入运行可变数量的方法
- asciidoc - Asciidoctor 中的自定义元素编号
- r - R 中的 furrr 包不会继续将工作分散到所有核心?
- bash - 如何检查与bash中服务器列表的连接?
- c - 在每个插槽基础上设置 DSCP
- android - 重复条目:构建 .apk 时的 META-INF/