DisplayTemplate中的DataTypeName始终为null

时间:2011-09-02 23:26:42

标签: asp.net-mvc-3

我正在尝试从自定义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?

1 个答案:

答案 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