من الممكن كتابة طريقة تمديد لطريقة HTML.ActionLink () ASP.NET؟
-
27-09-2019 - |
سؤال
في الوقت الحالي ، أحاول العمل حول حشرة 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. نأمل أن يتم تضمين المضادات ثم خارج الصندوق.