2008-10-10 10 views
0

현재 새 ASP.net MVC 웹 사이트를 만드는 중입니다. 좋은 연습이지만 Html.Encode를 사용하여 자신을 찾습니다. 꽤 지저분해진다. 나는 이것을 정리하는 좋은 방법이 자동으로 연산자를 오버로드하여 HTML 인코딩을 할 수 있다고 생각한다. 이전ASP.net MVC 사용자 지정 문자열 출력 과부하 연산자 <% = h

:

<%=h ViewData['username'] %> 

누구든지 내가 어쩌면 확장 방법 또는 무언가를 사용하여이 작업을 수행 할 수있는 방법 어떤 아이디어가 :

<%= Html.Encode(ViewData['username']) %> 

가 동등겠습니까?

+0

ToString()은'<%= x %>'에서 'x'를 필요한 경우 문자열로 변환하기 위해 호출됩니다. 따라서 문자열 대신 자신 만의 "문자열"을 사용하고 문자열 변환 방법 및/또는 문자열 암시 적 변환 연산자를 재정의하십시오. 또는 [이미 정확하게 수행하고있는] ASP.NET MVC 버전으로 업그레이드하십시오 (http://msdn.microsoft.com/en-us/library/system.web.mvc.mvchtmlstring.aspx). :) – bzlm

답변

7

그것은 연산자로 너무 깨끗하지의를 내 영문 ID에 따라서

public static string Safe(this string sz) 
{ 
    return HttpUtility.HtmlEncode(sz); 
} 

할 :

<%= this.ViewData["username"].Safe() %> 

과부하, 그러나 나는 다음과 같은 확장 방법을 사용 표현식의 끝 부분에 여분의 메소드를 추가하는 것은 함수를 통해 값을 보내는 것보다 나에게 더 예쁘게 보입니다.

+0

확장 방법을 아주 잘 사용합니다 ... – JPrescottSanders

-2

참고 :이 못생긴 및 검증되지 않은 해킹, 나는 내가 할 거라고 생각하지 않습니다이

public static String h (this System.Object o, System.Object viewData) 
{ 
    return Html.Encode(viewData); 
} 

난을 ViewData이 어떤 종류의 확실하지 않다, 그래서 여기 객체를 사용, 실제 코드에서 유형을 실제로 변경하는 것이 가장 좋습니다.

이하는 System.Object를 확장 방법에 걸려으로 작동, 그래서 그것은 추한 ... 모든 유형에서 항상 사용할 수 있지만이 작업 할 수 있습니다

<%=h(ViewData['username']) %> 
+1

자신을 부끄러워해야합니다! – bzlm