3

</a>現在、ドロップダウンメニューを機能させるために、このIE固有のコメントで終了タグをラップする必要があるIE6/7のバグを回避しようとしています。

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

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

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

Html.ActionLinkは安全な処理を行い、コメントを除外してJavascriptインジェクション攻撃を防ぎます。うんいいね。私はそれで大丈夫です。良い設計上の決定。

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

これでうまくいくと思いましたが、Intellisenseは私が書いたこのExtensionメソッドを採用していないようです。

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() %>すると、それはすでに拡張メソッドのように見えます。拡張メソッドを拡張できますか?

4

2 に答える 2

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に役立つはずです。

于 2010-06-16T18:34:07.127 に答える
0

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

これにより、ANtiXsshttp://wpl.codeplex.com/を使用する機会が与えられます。これは、次のようなMicrosoftのライブラリです。

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

ajaxとjavascriptを使用するほとんどすべてのアプリケーションはとにかくJavascriptEncodingを必要とするので、このライブラリなしで行くチャンスはないと思います。

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

編集

このページで、これが既存のHtmlヘルパーで機能しないことを確認しました:-(。MVC3までこの投稿を保持します。AnTiXssが含まれていると、箱から出してすぐに使用できます。

于 2010-06-16T19:02:26.717 に答える