سؤال

في الوقت الحالي ، أحاول العمل حول حشرة 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() %> يبدو أن هذه طريقة تمديد بالفعل. هل يمكنني تمديد طريقة التمديد؟

هل كانت مفيدة؟

المحلول

ربما تحتاج إلى وضع مساحة اسم الامتدادات في 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 Haackhttp://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

هذا يمنحك الفرصة لاستخدام المضادات المضادة http://wpl.codeplex.com/. إنها مكتبة من Microsoft لديها:

  • JavaScriptEncoding
  • الترميز بواسطة القائمة البيضاء

سيحتاج أي تطبيق تقريبًا يستخدم Ajax و JavaScript على javaScriptEncoding على أي حال ، لذلك أعتقد أنه لا توجد فرصة للذهاب بدون هذه المكتبة.

إذا كان المساعد يستخدم هذه المكتبة ، فأنت تحتاج فقط إلى إضافة علامة إلى القائمة البيضاء وكنت مستعدًا للذهاب.

تعديل

لقد رأيت للتو على الصفحة أن هذا لا يعمل مع HTML Helper :-(. حسنًا ، أحتفظ بهذا المنشور حتى MVC3. نأمل أن يتم تضمين المضادات ثم خارج الصندوق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top