2014-08-31 3 views
2

MVC4 면도기 뷰를 사용하여 런타임시 동적으로 열을 작성하기 위해 메타 데이터의 리플렉션을 사용하여 데이터 테이블을 표시합니다. int 열은 @ Html.DisplayFor에 표시되지 않지만 string, bool 등에 대해서는 나타납니다. @ Html.TextboxFor를 사용하거나 페이지에 값을 쓰면 모든 열이 나타나는 것처럼 보입니다. Visual Studio는 디버깅에서 {int} 객체 유형을 보여줍니다. 이는 내가 권투라고 가정하고 있습니다. 내 생각 엔 DisplayFor가 int가 아닌 type 객체 {int}를 키잉하고 있다는 것입니다. 어쨌든 가능하다면 객체 {int}에 대한 새로운 DisplayFor 템플릿을 만들지 않고이 작업을 수행 할 수 있습니까?Html.DisplayFor 박스형 값으로 작동하지 않음

@foreach (var item in words) 
{ 
    <tr> 
    @foreach (var prop in wordMeta.GetMetaProperties()) 
    { 
     dynamic val = prop.GetInstanceValue(item); 
     <td>@Html.DisplayFor(a => val)</td> 
    } 
    </tr> 
} 
+0

ViewModel은 필요에 따라 정확하게 유형을 지정해야합니다. ViewModel에서 객체로 박스형 int 값을 보내는 것은 분명히 [Code Smell] (http://en.wikipedia.org/wiki/Code_smell)입니다. –

+0

당신이 포코 (poco)를주는 것을 동적으로 표시 할 수있는 RAD 도구로 작업하십시오. 그것이 내가 성찰을 사용하는 이유입니다. – WillC

+0

그렇다면 도구가 자동으로 값 유형을 unbox 할 수 있기를 원하십니까? –

답변

0

그냥 값을 표시하고자하는 어떤 강력한 바인딩을 필요로하지 않는 경우, 단지 원시 템플릿을 사용합니다.

dynamic val = prop.GetInstanceValue(item); 
<td>@Html.Raw(val)</td> 

이것은 모든 데이터 유형에서 작동합니다. 도움이 되길 바랍니다.

+0

감사합니다.하지만 DisplayFor가 페이지에 표시하는 방법보다이 인스턴스에서 작동하지 않는 이유에 대해 더 자세히 설명합니다. – WillC

+0

동적 변수는 동적 형식의 변수이고 강하게 입력되는 변수가 아니므로 변수를 "동적"대신 "var"로 선언해야하며 DisplayFor 템플릿은 강력한 형식으로 만 작동합니다. – DinoMyte

+0

런타임시 객체의 열을 표시하기 위해 리플렉션을 사용하기 때문에 동적입니다. TextBoxFor 같은 다른 컨트롤이 있지만 DisplayFor 작동하지 않습니다. 템플릿에서 일치하는 것 같습니다. 상자에 넣어 진 int를 int로 가져 오는 방법은 무엇입니까? – WillC