2011-09-02 2 views
2

사용자 정의 DisplayTemplate의 ModelMetadata에서 DataTypeName에 액세스하려하지만 항상 null입니다. 내 목표는 DataTypeName을 찾는 decimal.cshtml 템플리트를 작성하고 통화 형식과 동일하면 통화로 작성하는 것입니다. 그렇지 않으면 10 진수를 보통과 같이 표시하십시오. ~ @Html.DisplayFor(m => m.foo)DisplayTemplate의 DataTypeName은 항상 null입니다.

디스플레이 템플릿 (: 강하게 나는이 같은 전화를 MyModel에 입력 된 뷰에서

public class MyModel 
{ 
    [DataType(DataType.Currency)] 
    public decimal foo { get; set; } 
} 

:

모델 : 여기에 내가 지금 무엇을의 예 /Views/Shared/DisplayTemplates/decimal.cshtml)

@model decimal? 
@{ 
    var type = ViewData.ModelMetadata.DataTypeName; // This is always null 
} 

나는 그것이들처럼 내 DisplayTemplate를 사용하고 있음을 알고있다 하지만, 모델에 DataType 특성이 있으므로이 경우 DataTypeName이 null이 아니길 기대합니다. 이와 같은 디스플레이 템플릿에서 DataType에 액세스 할 수있는 방법이 있습니까?

답변

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을 인쇄합니다.

+0

금요일부터 내 작업을 되돌리고 다시 한 번 시도해 보니 이번에는 효과적이었습니다! 나는 그것이 왜 처음에는 작동하지 않았는지 여전히 확실하지 않습니다. 확실히 늦은 금요일 오후에 벌레가 나옵니다. 다르게 작동해야한다는 것을 재확인 해 주셔서 감사합니다. 아마도 해킹 된 솔루션을 시도했을 것입니다. – bbak

관련 문제