3

지금, 나는 약간의 드롭 다운 메뉴에서 작업하기 위해이 IE 특정 주석과 </a> 닫는 태그의 포장을 필요로하는 IE6/7 버그를 해결하기 위해 노력하고있어 : 불행하게도ASP.NET의 Html.ActionLink() 메서드에 대한 확장 메서드를 작성할 수 있습니까?

<!--[if IE 7]><!--></a><!--<![endif]--> 

을, I 이처럼 내보기 페이지 코드에 직접 주입 할 수 없습니다

<%= Html.ActionLink("LinkName<!--[if IE 7]><!--></a><!--<![endif]-->","Action","Controller") %> 

을 Html.ActionLink가 안전한 일을하고 자바 스크립트 인젝션 공격을 방지하기 위해 주석을 걸러으로. 그래 좋아. 나는 괜찮아. 좋은 디자인 결정.

내가하고 싶은 것은 확장 메서드를 작성하는 것입니다. 그러나이 프로세스는 이전에하지 않았으므로 그 부분을 보지 못했습니다.

나는이 방법이 효과가있을 것이라고 생각했지만 Intellisense는 필자가 작성한이 확장 메서드를 선택하지 않은 것 같습니다.

public static class MyLinkExtensions 
{ 
    public static string ActionLinkIE(this HtmlHelper htmlHelper, 
     string linkText, string actionName, string controllerName) 
    { 
     return LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName). 
      Replace(@"</a>", @"<!--[if IE 7]><!--></a><!--<![endif]-->"); 
    } 
} 

의견이 있으십니까?

편집 : 클래스 이름이 중요합니까? (제 경우에는 MyLinkExtensions라고 부릅니다.)

<%= Html.ActionLink() %> 이상의 마우스가 이미 확장 메서드 인 것처럼 보입니다. 확장 방법을 확장 할 수 있습니까?

+0

응용 프로그램을 만들려고 했습니까? 코드가 불법으로 처리되는 경우 (또는 Intellisense에 표시되지 않는 경우)도 괜찮습니다. – ChrisF

+0

그래, 구축하려했지만 행운이 없었습니다 – Pretzel

답변

6

당신은 아마의 Web.config에 확장 네임 스페이스를 넣어해야합니다

<pages>  
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Linq" /> 
     <add namespace="Pretzel.Extensions.Html" /> 
     </namespaces> 
</pages> 

IntelliSense를 도와야한다 그.

+0

그게 전부 였어. 너의 도움 없이는 그걸 알아 내지 못했을거야. 고마워! – Pretzel

+0

또한 확장 클래스를 확장 할 클래스와 동일한 네임 스페이스에 넣을 수 있습니다. 예를 들어,'System.Web.Mvc'에'HtmlHelper' 확장을 넣습니다. 그렇게하면 라이브러리를 참조하는 동안 확장 메서드가 자동으로 선택됩니다. (확장 된 유형을 고려하면 논리적 인 의미를 갖습니다.) – Peter

0

당신은 필 haack http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

이 당신에게 ANtiXss http://wpl.codeplex.com/ 사용할 수있는 기회를 제공합니다에서이 게시물에 따라 출력을 인코딩 라이브러리를 변경할 수 있습니다. 그것은이 마이크로 소프트에서 라이브러리 :

  • JavascriptEncoding
  • 화이트리스트

와 자바 스크립트 어쨌든 JavascriptEncoding가 필요합니다, 그래서 갈 기회가 없다고 생각 아약스를 사용하는 거의 모든 응용 프로그램에서

  • 인코딩 이 라이브러리가 없으면.

    도우미가이 라이브러리를 사용하는 경우 허용 목록에 태그를 추가하기 만하면 준비가됩니다.

    난 그냥이 나던 :-(하여 기존의 HTML을 도우미 일을하는 페이지에서 본

    편집. 그럼 난 상자에서 다음 포함되어 MVC3. 희망 AnTiXss 때까지이 게시물을 유지.

  • 관련 문제