2012-02-08 2 views
4

Есть ли где-нибудь я вижу определение метода текущего метода Ajax.ActionLink, поскольку я хотел бы расширить его с помощью настраиваемого метода, но не уверен в его текущем определение методаASP.NET MVC - расширение метода Ajax.ActionLink

EDIT: Это то, что я до сих пор:

public static class AjaxExtensions 
    { 
     public static IHtmlString MyActionLink(
     this AjaxHelper htmlHelper, 
     string linkText, 
     string action, 
     string controller, 
     object routeValues, 
     AjaxOptions ajaxoptions, 
     object htmlAttributes 
    ) 
     { 
      var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); 
      var anchor = new TagBuilder("a"); 
      anchor.InnerHtml = linkText; 
      anchor.Attributes["href"] = urlHelper.Action(action, controller, routeValues); 
      anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 
      return MvcHtmlString.Create(anchor.ToString()); 
     } 
    } 

но, очевидно, мне нужно, чтобы добавить AjaxOptions материал, который по умолчанию содержит Ajax.ActionLink, но я не уверен, о том, что это определение выглядит как.

Причиной для этого является то, что я хочу LinkText быть HTMLString как я хочу сделать что-то вроде этого: @Ajax.MyActionLink("<span class="highlight">Hello</span> World",...)

Второе редактирование:

Я получаю ошибку компиляции сейчас:

...does not contain a definition for 'MyActionLink' and the best extension method overload 'MyProject.Helpers.AjaxExtensions.MyActionLink(System.Web.Mvc.AjaxHelper, System.Web.HtmlString, string, object, System.Web.Mvc.Ajax.AjaxOptions)' has some invalid arguments 

Вот мой метод расширения:

public static IHtmlString MyActionLink(
     this AjaxHelper ajaxHelper, 
     HtmlString linkText, 
     string action, 
     object routeValues, 
     AjaxOptions ajaxoptions 
    ) 
     { 
      return MyActionLink(ajaxHelper, linkText, action, routeValues, ajaxoptions); 
     } 

Вот как я использую его:

@Ajax.MyActionLink(@Html.Raw(item.ITEMID.Replace((string)ViewData["ID"], "<span class='highlighted'>" + (string)ViewData["ID"] + "</span>")), "MoreDetails", new { id = item.ITEMID }, new AjaxOptions() 
         { 
          UpdateTargetId = "MoreDetails-" + item.ITEMID, 
          InsertionMode = InsertionMode.Replace 
         }) 

Третье редактирование:

Я изменил мой метод расширения:

public static IHtmlString MyActionLink(
      this AjaxHelper ajaxHelper, 
      IHtmlString linkText, 
      string action, 
      object routeValues, 
      AjaxOptions ajaxoptions 
     ) 
      { 
       return MyActionLink(ajaxHelper, linkText, action, routeValues, ajaxoptions); 
      } 

и теперь я получаю следующее сообщение об ошибке:

Cannot evaluate expression because the current thread is in a stack overflow state. System.Collections.IDictionary 

ответ

5

Я решил это, используя решение, которое можно найти здесь: http://forums.asp.net/p/1702210/4518688.aspx/1?Re+Quick+question+about+Ajax+ActionLink+and+span

+2

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить основные части ответ здесь, и укажите ссылку для справки. –

Смежные вопросы