Raw ActionLink linkText

Я хочу поместить кнопку в качестве текста @ActionLink(), но я не могу, потому что это HTML-экранирует мою строку... Я нашел механизм @Html.Raw() и попробовал @ActionLink().ToHtmlString(), но не могу понять, как его собрать.. .

Я нашел статью, в которой описывается создание расширения для аналогичной цели, но оно уже готово. столько хлопот... должен же быть легкий путь?


person ekkis    schedule 19.05.2011    source источник


Ответы (2)


Вы можете написать помощник:

public static class HtmlExtensions
{
    public static IHtmlString MyActionLink(
        this HtmlHelper htmlHelper, 
        string linkText, 
        string action, 
        string controller,
        object routeValues,
        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());
    }
}

а затем используйте этот помощник:

@Html.MyActionLink(
    "<span>Hello World</span>", 
    "foo", 
    "home",
    new { id = "123" },
    new { @class = "foo" }
)

которые заданные маршруты по умолчанию будут производить:

<a class="foo" href="/home/foo/123"><span>Hello World</span></a>
person Darin Dimitrov    schedule 19.05.2011
comment
о, это намного лучше. Я бы хотел, чтобы они просто предоставили переключатель для существующего метода. Думаю, я не хотел писать для этого помощника, но ваше решение довольно легкое. Благодарность! - person ekkis; 19.05.2011
comment
хотя, если честно, я могу просто сделать <a href='@Url.Action()'>whatever</a>' - person ekkis; 19.05.2011

Если вы хотите создать ссылку на пользовательское действие, использующую библиотеку T4MVC, вы можете написать следующий код:

    public static System.Web.IHtmlString DtxActionLink(
        this System.Web.Mvc.HtmlHelper html, string linkText,
        System.Web.Mvc.ActionResult actionResult = null,
        object htmlAttributes = null)
    {
        System.Web.Mvc.IT4MVCActionResult oT4MVCActionResult =
            actionResult as System.Web.Mvc.IT4MVCActionResult;

        if (oT4MVCActionResult == null)
        {
            return (null);
        }

        System.Web.Mvc.UrlHelper oUrlHelper =
            new System.Web.Mvc.UrlHelper(html.ViewContext.RequestContext);

        System.Web.Mvc.TagBuilder oTagBuilder =
            new System.Web.Mvc.TagBuilder("a");

        oTagBuilder.InnerHtml = linkText;

        oTagBuilder.AddCssClass("btn btn-default");

        oTagBuilder.Attributes["href"] = oUrlHelper.Action
            (oT4MVCActionResult.Action,
            oT4MVCActionResult.Controller,
            oT4MVCActionResult.RouteValueDictionary);

        oTagBuilder.MergeAttributes
            (new System.Web.Routing.RouteValueDictionary(htmlAttributes));

        return (html.Raw(oTagBuilder.ToString()));
    }
person Dariush Tasdighi    schedule 13.09.2014