質問

今、私はIE6/7のバグを回避しようとしています。 </a> この具体的なコメントでタグを閉じて、ドロップダウンメニューを機能させるには:

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

残念ながら、このようなビューページコードにこれを直接注入することはできません。

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

html.actionlinkが安全なことを行い、コメントを除外して、JavaScriptインジェクション攻撃を防ぐためにコメントを除外します。うんいいね。私はそれで大丈夫です。良いデザインの決定。

私がやりたいのは、これに拡張方法を書くことですが、これをやったことがないので、プロセスは私を避けています。

私はこれがうまくいくと思ったが、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() %> これはすでに拡張メソッドのようです。拡張メソッドを拡張できますか?

役に立ちましたか?

解決

おそらく、extensions namespaceを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に役立つはずです。

他のヒント

Phil Haackのこの投稿に従って、出力をエンコードするためにライブラリを変更できますhttp://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

これにより、Antixsを使用する機会が与えられます http://wpl.codeplex.com/. 。マイクロソフトの図書館です。

  • JavaScriptEncoding
  • ホワイトリストによるエンコード

AjaxとJavaScriptを使用するほぼすべてのアプリケーションは、とにかくJavaScriptEncodingが必要なので、このライブラリなしで行く機会はないと思います。

ヘルパーがこのライブラリを使用している場合、タグをホワイトリストに追加するだけで、準備ができています。

編集

ページで、これが既存のHTMLヘルパーで動作しないことを見ました:-(。さて、MVC3までこの投稿を保持します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top