4 Stimmen

ASP.NET MVC - Erweiterung der Methode Ajax.ActionLink

Gibt es irgendwo kann ich die Methodendefinition der aktuellen Ajax.ActionLink-Methode sehen, wie ich möchte in der Lage sein, es mit einer benutzerdefinierten Methode zu erweitern, aber nicht sicher auf seine aktuelle Methodendefinition

EDIT: Dies ist mein bisheriger Stand:

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());
        }
    }

Aber offensichtlich muss ich die AjaxOptions Sachen hinzufügen, die die Standard-Ajax.ActionLink enthält, aber ich bin mir nicht sicher, was es die Definition wie aussieht.

Der Grund dafür ist, dass ich möchte, dass der LinkText ein HtmlString ist, da ich etwas wie folgt tun möchte: @Ajax.MyActionLink("<span class="highlight">Hello</span> World",...)

Zweite Bearbeitung:

Ich erhalte jetzt einen Kompilierungsfehler:

...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

Hier ist meine Erweiterungsmethode:

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

Ich verwende es folgendermaßen:

@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
                       })

Dritte Bearbeitung:

Ich habe meine Erweiterungsmethode geändert:

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

und jetzt erhalte ich den folgenden Fehler:

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

5voto

CallumVass Punkte 11068

Ich habe das Problem mit Hilfe der hier gefundenen Lösung gelöst: http://forums.asp.net/p/1702210/4518688.aspx/1?Re+Kurz+Frage+zu+Ajax+ActionLink+und+span

0voto

NinjaNye Punkte 6788

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X