Использование HTML5-атрибутов data- с MVC3 и Html.ActionLink <TController> - PullRequest
3 голосов
/ 23 ноября 2011

Похоже, что неуниверсальная перегрузка Html.ActionLink() прекрасно работает с атрибутами HTML5 data- путем переименования атрибутов с подчеркиванием в атрибуты с дефисами:

Как использовать тире в атрибутах данных HTML-5- * в ASP.NET MVC

Но, похоже, это не работает для строго типизированных Html.ActionLink<TController>().

Итак, ссылка для JQuery Mobile

@(Html.ActionLink<HomeController>(
     c => c.Index(), 
     "Home",  
      new { data_direction="reverse" } ))

дает исходный HTML-код

<a data_direction="reverse" href="/" class="ui-link">Home</a>

это не то, что я хочу.

Есть идеи? Там нет перегрузки, которая занимает RouteValueDictionary, поэтому этот маршрут отсутствует.

1 Ответ

4 голосов
/ 23 ноября 2011

Так что, похоже, есть ошибка (функция?) В методе расширения Microsoft.Web.Mvc на HtmlHelper.ActionLink<TController>.Мой обходной путь:

using System;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;
using Authentication;

public static class LinkExtensions
{

    // Named thusly to avoid conflict, I anticipate a search-and-replace later!
    public static MvcHtmlString ActionLink5<TController>(this HtmlHelper helper, Expression<Action<TController>> action, string linkText, object htmlAttributes) where TController : Controller
    {
        RouteValueDictionary routeValuesFromExpression = Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<TController>(action);
        return helper.RouteLink(linkText, routeValuesFromExpression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }
}

, который при вызове с

@(Html.ActionLink5<HomeController>(
    c => c.Index(), 
    "Home",  
    new { data_direction="reverse" } ))

работает нормально ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...