DataTypeName в DisplayTemplate всегда равно нулю - PullRequest
2 голосов
/ 03 сентября 2011

Я пытаюсь получить доступ к DataTypeName из ModelMetadata в пользовательском DisplayTemplate, но он всегда равен нулю.Моя цель - создать шаблон decimal.cshtml, который ищет DataTypeName и, если он равен 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 голосов
/ 03 сентября 2011

Странно, должно работать.Я не могу воспроизвести.Вот что я попробовал в новом приложении:

Модель:

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, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...