2013-04-05 4 views
5

MvcHtmlString 안에 캡슐화 된 HTML 요소에 css 클래스를 삽입 할 수 있습니까?CSS 클래스를 MvcHtmlString에 삽입하는 방법은 무엇입니까?

나는 다음과 같은주의 사항으로, 폼 요소 (TextBox, TextBoxFor<> 등)에 대한 MVC 확장 방법의 내 자신의 버전을 만드는, 짓고 있어요 프레임 워크의 일환으로 임무를 봤는데 :

  • 이미 사이트 용으로 설계된 스타일과 일치하도록 CSS 클래스를 포함하여 올바른 HTML 마크 업을 만들어야합니다. 대다수의 경우, 이는 단순히 특정 클래스를 추가하는 것을 의미합니다.
  • 개발자가 MVC 확장의 방법은 MvcHtmlString 그래서 간단한 방법을 반환하지 모든 경우

대부분의를 모방를 사용하여 편안하게 느낄 수 있도록 그들은 가능한 한 MVC 확장 방법에 참으로해야한다는 기능은 내 메서드에서 직접 이러한 메서드를 호출하는 것입니다.

`@ Ou.TextBoxFor (m => : 내 프레임 워크를 사용하고, 개발자의 라인을 따라 뭔가를 부를 것이다하는 TextBox, 예를 들어, 생성하고자하는, 그래서 HTML을 도우미, OuHelper 내 자신이 m.Username)

그리고 난과 같이 렌더링하는 결과 HTML을 싶습니다

<input type="text" name="Username" id="Username" class="int-text" />

MVC 프레임 워크에있는 것처럼 자체적 인 오버로드 버전을 만드는 경우, 필요에 따라 추가 CSS 클래스를 추가 할 수 있지만 해당 HTML 출력의 작은 변화에 대해서는 과도한 것처럼 보입니다. 모든 오버로드에 대해 동일한 구현을 제공해야합니다 (TextBox 만 있으면 일반 버전과 비 제너릭 버전을 모두 계산할 때 약 12 ​​개가 필요합니다). 내가 뭘하고 싶은지 TagBuilder은 역순으로 (출력으로 시작하여 MergeAttributes과 같은 것을 가능하게하는 객체를 생성한다.)하지만 가능하지는 않다.

분명히 : 내가 쓰고있는 프레임 워크 코드는 css 클래스 자체를 추가해야하지만 개발자가 자신 만의 CSS 클래스를 추가하는 확장 메서드를 사용하는 경우에도 가능해야합니다. 이들은

답변

3

당신은 것 같다 현재 꽤 좋은 시스템. HtmlHelper 클래스의 기본 스타일을 주입/덮어 쓸 수 없기 때문에 원하는 경우 HtmlHelper's input extensions here의 소스를 체크 아웃 할 수 있습니다.

내가 생각하는 유일한 방법은 실제 ASP.NET 소스에서 수행되는 것과 같은 확장 메서드를 사용하는 것입니다. 다음은 예제입니다. 함수의 이름은 원하는 것일 수 있지만 동일한 매개 변수 목록을 가지고 있기 때문에 TextBoxFor과 달라야합니다.

public static class HtmlHelperExtensions 
{ 
    public static MvcHtmlString IntTextFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) 
    { 
     return htmlHelper.TextBoxFor(expression, new { @class = "int-text" }); 
    } 
} 

일반 MVC에는 확장 메소드의 네임 스페이스 만 포함됩니다.

@using MyProject.Helpers; 

@Html.IntTextFor(e => e.Age) 
+0

환호성 Daniel - 그래,이 라인을 따라 뭔가를 할 것 같습니다. 너무 많은 오버로드를 생성하지 않아도되기를 희망했지만 현재 MVC 프레임 워크가 제공하는 것과 동일한 수준의 유연성을 제공해야합니다. 몇 가지 확장 메서드를 만들고 필요에 따라 클래스를 html 특성에 병합합니다 (개발자가 내 프레임 워크를 사용하여 필요에 따라 고유 한 사용자 지정 클래스를 추가 할 수 있도록) – levelnis

0

가 인라인 스타일이

@Ou.TextBoxFor(m => m.Username,new{@Class="your class Name"}) 

또는 같이 할 수있는 표준 MVC 프레임 워크 형태로 확장 방법 '기능에 따라 추가/추가 될 수

@Ou.TextBoxFor(m => m.Username,new{@style="font-size:10px"}) 
관련 문제