2013-01-19 2 views
0

다음 문제로 어려움을 겪고 있으며이를 해결할 수있는 적절한 방법을 찾을 수 없습니다.면도기에 HTML 덧글 추가

내 도전 과제 : 면도기 뷰에서 실제 속성 값 바로 앞에 HTML 주석을 씁니다.

이 내 (simplyfied) 뷰 모델입니다 :

<h2>@Model.Title</h2> 

지금 난 그냥 HTML 주석을 작성하려면 :

public class Article 
{ 
    public string Title {get;set;} 
} 

은 단순히 내 면도기보기에서이 작업을 수행이 제목을 작성하는 방법 실제 제목 앞에 있기 때문에 생성 된 HTML은 다음과 같습니다 (간단히) :

<h2><!-- some parameters for a 3th party system --> This is my title</h2> 

HTML 주석이옵니다. 'Title'속성에 적용된 속성으로부터. 값이 생성되므로 .NET Framework의 TypeDescriptor를 사용하여 런타임에 attribute-value가 추가됩니다.

이제는 HTML 도우미를 사용하여 모든 속성을 간단히 작성하여이 작업을 수행 할 수 있음을 알고 있습니다. 이와 같이 : @ MyHelper.Write (m => m.Title)

그러나 잠재적으로 모든 내 속성이 HTML 주석을 필요로하므로보기를 혼란시키고 HTML 도우미를 사용하지 않으므로 HTML 도우미를 사용하지 않으려합니다. 보기가보기 좋고 (더) 읽을 수 있습니다.

이 내가 시도 것입니다 :

  • (WebViewPage<TModel>에서 상속) 사용자 정의 면도기 기본 페이지를 만들었습니다. 덮어 쓰기는 '쓰기'방법입니다.

이런 종류의 작품이 있지만 가장 큰 문제는 내가 어떤 속성이 그 순간에 작성되었는지 알 수 없다는 것입니다. 'Write'메소드에서 현재 속성 이름을 가져올 방법이 없습니다. 이제 동적으로 모델을 검색하여 작성된 값으로 속성을 찾고 속성에서 HTML 주석을 앞에 둡니다.

내 질문 : 내가 원하는 것을 달성하기위한 또 다른 접근 방법이 있습니까? 전에 sais로 : 나는 HTML 도우미를 사용하여 내 모든 속성을 쓰지 않으려합니다. (루프 등을 생각하면 좋지 않습니다.) 그것은 실제 값의 일부가 아니다

  1. :

    또한, 내 컨트롤러에서이 HTML 주석을 추가하면 이후에는 옵션이 없습니다. 일종의 메타 데이터입니다.

  2. 은 HTML 주석
  3. int 년대, 두 배의 및 DateTime 년대에 추가해야합니다. 문자열을 포함하도록 double 속성을 조정할 방법이 없습니다. (이미지는 List<DateTime>이고 모든 날짜에는 HTML 주석이 필요합니다.)
  4. web.config 설정에 따라 HTML 주석을 추가해야합니다. 예 또는 아니오 (실제 HTML 주석은 속성 값마다 다릅니다)

이 질문은 다소 길다는 것을 알고 있습니다. 그 죄송합니다. 어떤 생각이라도 감사합니다.

+0

'_layout' 공유보기에 넣을 수없는 이유는 무엇입니까? – Oded

+0

'this'로 무엇을 의미하는지 확실하지 않습니다 ... – RainyDays

+0

의견이있는 제목. – Oded

답변

1

당신은 기존 @Html.Raw(Model.Title)

또는 당신이 사용할 수있는 디스플레이 템플릿을 사용할 수 있습니다. 이런 식으로 동작하려는 속성에 UIHintAttribute를 추가하십시오.

@Html.DisplayFor(m => m.MyString) 

이 여전히 당신은을 사용하는 것이 필요합니다

@model string 
@Html.Raw(model) 

그런 다음보기에서 사용할 수 :
public class MyModel 
{ 
    [UIHint("Raw")] 
    public string MyString { get; set; } 
} 

유형 문자열의 모델을 받아 Raw.cshtml라는 새로운 디스플레이 템플릿 만들기 도우미 ( DisplayFor). 이는 최소한의 코드 변경으로 하나 이상의 필드 동작을 쉽게 변경할 수있는 권장 사례입니다.

+0

와우. 나는 디스플레이 템플릿에 대해 읽었지만 잠재력을 깨닫지 못했습니다. 이것을 시도하려고합니다. 유망 해 보인다. 결과를 알려줍니다. 감사! – RainyDays

+0

@RainyDays. 당신은 절대적으로 옳습니다. 디스플레이 및 편집기 템플릿에는 엄청난 잠재력이 있습니다. 그 (것)들을 잡으면,'@ Model.MyString'을 결코 다시하고 싶지 않을 것입니다. –

+0

Raw.cshtml은 Shared의 DisplayTemplates 폴더에 일반적으로 포함됩니다. – manojlds