【问题标题】:Has behaviour of Display Templates changed in MVC5 from MVC3?MVC5 中显示模板的行为是否已从 MVC3 更改?
【发布时间】:2016-11-09 16:20:05
【问题描述】:

我已从 MVC3/Razor 升级到 MVC5/Razor。

我发现我的显示模板不再读取模型值。

模板名为“MyTemplate”:

@model System.Object
@{
if (Model !=null)
{
    string.Format("{0:0.00}", Model);
}
else
{
    @:-    
}

}

调用者:

@Html.DisplayFor(modelItem => item.mydecimalvalue, "MyTemplate")

当我通过调试器跟踪模型时,模型返回 null。它曾经在 MVC3 中运行良好

对此的任何帮助将不胜感激。

编辑 1

string.Format("{0:0.00}", Model);

应该是:

@(string.Format("{0:0.00}", Model));

在 MVC4 或 5 中一定有一些改变,因为它过去可以工作。

【问题讨论】:

  • 不清楚你在问什么。您的模型类型是System.Object。为什么? item.mydecimalvalue 是什么类型,十进制?你为什么在你的模板中检查它是否为空(如果(模型!=空))?什么是“返回null”? Model.ToString()? string.Format 行是什么,为什么要评论它?请提供一些细节。谢谢。
  • 感谢您的回复。输入类型是十进制,尽管值可能为空,在这种情况下我想显示“-”。如果有值,我想将小数格式化为 2 位小数。我已将我的代码更正为更清晰。
  • "item.mydecimalvalue" 在调用视图中确实有一个值。我已经用调试器检查了这个并将它写出来。但是,该值在模板中被转换为 null。
  • 只是出于好奇,将模型类型更改为@model System.Decimal?@model System.Nullable<System.Decimal> 是否有效?
  • @model System.Decimal?不起作用。会尝试另一个。

标签: asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-5


【解决方案1】:

如果您使用 Html.FormatValue,它会起作用,因为它是 Razor 中 String.Format 的首选方式。

@model System.Object
@{
    if (Model != null)
    {
        @Html.FormatValue(Model, "0.00")
    }
    else
    {
        @:-
    }

}

参考:

using string.Format in MVC Razor view page

正如您所发现的,可能使用String.Format,但它是一个 PITA,因为需要奇怪的(非直观的)语法。出于这个原因,Html.Format(剃须刀扩展名)更简洁、IMO、可读性更强。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多