Есть ли где-нибудь я вижу определение метода текущего метода 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
Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить основные части ответ здесь, и укажите ссылку для справки. –