Испорчено ли использование атрибутов data- * в HTML-5 в ASP.NET MVC 4 (бета-версия)? - PullRequest
8 голосов
/ 07 марта 2012

Согласно этому вопросу я должен написать что-то вроде этого:

@Html.ActionLink( "Delete", "Delete", "Message", new { data_id=id, @class="delete" } )

или как счастливый пользователь T4MVC может сделать:

@Html.ActionLink( "Delete", MVC.Message.Actions.Delete(), new { data_id=id, @class="delete" } )

И заменить символ подчеркивания в "data_id" во время рендеринга:

<a href="/message/delete" class="delete" data-id="42">Delete</a>

Однако в бета-версии MVC 4 это, похоже, не работает.Кто-нибудь еще видел эту проблему?

Это преднамеренное изменение, и если так, что я должен вместо этого сделать?

ОБНОВЛЕНИЕ - КАК ИСПРАВИТЬ (ВРУЧНУЮ)

I 'Мы применили следующие изменения к файлу T4MVC.tt, который устраняет проблему в сгенерированном коде:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, ActionResult result, object htmlAttributes, string protocol = null, string hostName = null, string fragment = null) {
    //was: return ActionLink(htmlHelper, linkText, result, new RouteValueDictionary(htmlAttributes), protocol, hostName, fragment);
    return htmlHelper.RouteLink(linkText, null, protocol, hostName, fragment, result.GetRouteValueDictionary(), HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}

ОБНОВЛЕНИЕ 2 - ИСПРАВЛЕНО ИСПРАВЛЕНО

Дэвид Эббо былмолниеносно реагирует на сообщенную проблему и уже слил вышеуказанное исправление в T4MVC.

ОБНОВЛЕНИЕ 3 - ИСПРАВИТЬ ИСПРАВЛЕНИЕ

Довольно смущающе, оригинальное представленное исправление фактически не работало, так как все еще вызывало недопустимую перегрузку.Теперь я изменил код, чтобы сделать то же самое, что MVC делает внутренне (используя их вспомогательный метод), и уведомил Дэвида, чтобы он был включен в T4MVC.Возьмите 2.6.70 из codeplex или обновите его, используя NuGet, когда он будет выпущен, возможно, в ближайшее время.

1 Ответ

5 голосов
/ 07 марта 2012

Попробуйте

@Html.ActionLink( "Delete", "Delete", "Message", null, new { data_id=id, @class="delete" } )

Я думаю, что из-за всех перегрузок предполагается, что ваш 4-й параметр является параметром routeValues.

...