Предоставление идентификатора в ActionLink () или RouteLink ()? - PullRequest
1 голос
/ 21 октября 2011

Я новичок в MVC и хотел бы добавить ссылку на что-то вроде ~/Destinations/35, где она будет ссылаться на представление Index контроллера Destination, а 35 - это ID получателя, который будет отображаться.

По-видимому, ни ActionLink (), ни RouteLink () не позволяют мне создать такую ​​ссылку.

Кроме того, я пробовал что-то вроде этого:

<table>
@foreach (var d in ViewBag.Results)
{
    <tr>
        <td>
            @Html.ActionLink(
                String.Format("<b>{0}</b>", @Html.Encode(d.Title)),
                "Details", "Destinations")
        </td>
    </tr>
}
</table>

Но я получаюследующая ошибка в строке ActionLink, которую я не понимаю.

'System.Web.Mvc.HtmlHelper' не имеет применимого метода с именем 'ActionLink', но, похоже, у него есть метод расширения,название.Методы расширения не могут быть динамически отправлены.Попробуйте привести динамические аргументы или вызвать метод расширения без синтаксиса метода расширения.

Может ли кто-нибудь помочь мне создать эту ссылку?

1 Ответ

5 голосов
/ 21 октября 2011

Первая проблема с вашим кодом заключается в том, что вы пытаетесь использовать HTML в тексте ссылки (теги <b>), что невозможно, потому что по своей конструкции он всегда кодирует HTML.

Итак, если вы неЕсли вам не нужен HTML-код в ссылке, вы можете сделать это:

@Html.ActionLink(d.Title, "Details", "Destinations", new { id = "35" }, null)

И, предполагая, что вам нужен HTML-код внутри якоря, у вас есть несколько возможностей:

  1. Написатьпользовательский помощник ActionLink, который не будет кодировать HTML-текст (рекомендуется), а затем использовать его так:

    @Html.MyBoldedActionLink(d.Title, "Details", "Destinations", new { id = "35" }, null)
    
  2. Что-то вроде строки:

    <a href="@Url.Action("Details", "Destinations", new { id = "35" })">
        <b>@d.Title</b>
    </a>
    

и так как я рекомендую первый подход, вот пример реализации пользовательского помощника:

public static class HtmlExtensions
{
    public static IHtmlString MyBoldedActionLink(
        this HtmlHelper htmlHelper,
        string linkText,
        string actionName,
        string controllerName,
        object routeValues,
        object htmlAttributes
    )
    {
        var anchor = new TagBuilder("a");
        anchor.InnerHtml = string.Format("<b>{0}</b>", htmlHelper.Encode(linkText));
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        anchor.Attributes["href"] = urlHelper.Action(actionName, controllerName, routeValues);
        anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        return new HtmlString(anchor.ToString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...