Link Helper Class в ASP.Net MVC; Где находится URL-код? - PullRequest
1 голос
/ 31 июля 2009

Чтобы получить URL, которые я хотел, я создал простой помощник Link Creator для своих результатов поиска. Но это не позволит мне использовать в нем urlencode сервера, и некоторые из передаваемых деталей - это французские / чешские / шведские слова, запятые и апострофы;

Есть ли быстрая функция, которая удалит весь этот мусор перед рукой?

1 Ответ

2 голосов
/ 31 июля 2009

Создайте собственный HTML-помощник для этого. Сгенерируйте HTML-разметку с помощью TagBuilder и используйте UrlEncode, где вы хотите. Например:

public static string SearchActionLink(this HtmlHelper html, string linkText, string actionName, object routeValues)
{
    var innerHtml = html.ViewContext.HttpContext.Server.UrlEncode("....");

    TagBuilder tagBuilder = new TagBuilder("a") {
        InnerHtml = innerHtml;
    };

    var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
    var url = urlHelper.Action(actionName, routeValues);
    tagBuilder.MergeAttribute("href", url);

    return tagBuilder.ToString(TagRenderMode.Normal);
}

ОБНОВЛЕНИЕ:

Как то так?:

public static string SearchActionLink(this HtmlHelper html, string linkText, System.Web.Routing.RouteValueDictionary routeValues)
{
    var ref = html.ViewContext.HttpContext.Server.UrlEncode(routeValues["ref"]);
    routeValues["ref"] = "_REF_";

    TagBuilder tagBuilder = new TagBuilder("a") { InnerHtml = linkText; };

    var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
    var url = urlHelper.RouteUrl(routeValues).Replace("_REF_", ref);

    tagBuilder.MergeAttribute("href", url);

    return tagBuilder.ToString(TagRenderMode.Normal);
}
...