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