我正在尝试从自定义DisplayTemplate中的ModelMetadata访问DataTypeName,但它始终为null。我的目标是创建一个寻找DataTypeName的decimal.cshtml模板,如果它等于Currency将其格式化为货币。否则显示正常的小数。 这是我现在拥有的一个例子:
模特:
public class MyModel
{
[DataType(DataType.Currency)]
public decimal foo { get; set; }
}
在强烈输入MyModel
的视图中,我有这样的电话:@Html.DisplayFor(m => m.foo)
显示模板(〜/ Views / Shared / DisplayTemplates / decimal.cshtml)
@model decimal?
@{
var type = ViewData.ModelMetadata.DataTypeName; // This is always null
}
我知道它正在使用我的DisplayTemplate,但我希望DataTypeName在这种情况下不为null,因为我在模型上有DataType属性。有没有办法在这样的显示模板中访问DataType?
答案 0 :(得分:0)
奇怪,它应该工作。我无法重现。这是我在新应用程序中尝试的内容:
型号:
public class MyModel
{
[DataType(DataType.Currency)]
public decimal foo { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyModel
{
foo = 12.5m
});
}
}
查看(~/Views/Home/Index.cshtml
):
@model MyModel
@Html.DisplayFor(x => x.foo)
显示模板(~/Views/Home/DisplayTemplates/decimal.cshtml
):
@model decimal?
@ViewData.ModelMetadata.DataTypeName
当我运行应用程序时,它按预期打印Currency
。