Как получить результирующий JavaScript из AjaxOptions в ASP.NET MVC Framework? - PullRequest
0 голосов
/ 04 октября 2009

Я пробую ASP.NET MVC Framework и хотел бы создать вспомогательный метод ajax. По сути, этот помощник будет действовать как ActionLink, но без кодирования текста ссылки. Писать как HtmlHelper довольно тривиально, вам просто нужно написать собственную версию GenerateLinkInternal. Однако это не работает для AjaxHelpers, поскольку ajax-версия GenerateLink косвенно вызывает ToJavascriptString (через GenerateAjaxScript), который является внутренним, поэтому его нельзя вызывать вне сборки MVC. Я уверен, что могу переписать все это, но это кажется излишним, есть ли лучший способ?

В конечном счете, я бы хотел, чтобы этот помощник действовал как BeginForm, чтобы ссылка окружала блок HTML. Я еще не смотрел на это, но я предполагаю, что он также использует ToJavascriptString. Я искал в Интернете и, просматривая исходный код MVC, начинаю задумываться, не ошибся ли я совсем.

Спасибо

Обновление : Чем больше я смотрю на эту проблему, тем больше я думаю, что решения просто не существует. Кто бы ни написал MVC Framework, он не задумывался о том, чтобы помочь людям написать своих собственных помощников!

Обновление : я закончил тем, что написал помощника, который в значительной степени дублирует функциональность AjaxOptions.

1 Ответ

0 голосов
/ 04 октября 2009

Возможно, вы могли бы сделать это намного проще, написав свой собственный помощник с нуля (то есть не совершайте вызовы ни одному из методов Html.ActionLink() / Ajax.ActionLink()), просто используя вместо него Url.Action().

Например, это довольно тривиально:

public static string NonEncodedUrl(this HtmlHelper helper, 
    string linkAction, string text)
{
    // Get a new UrlHelper instance in the current context
    var url = new UrlHelper(helper.ViewContext.RequestContext);

    return String.Format("<a href=""{0}"">{1}</a>", url.Action(linkAction), text);
}

Конечно, вы можете расширить это с помощью перегрузок и дополнительных параметров в соответствии с вашими потребностями.

...