Я использую собственное расширение для моих ссылок ActionLink. Я добавил атрибут data_url
, который должен быть переведен в атрибут data-url
. Это замена знака подчеркивания тире.
Вот ссылка 1, использующая мое собственное расширение:
@Ajax.ActionLink("Add", MyRoutes.GetAdd(), new AjaxOptions()
, new { data_url = Url.Action(...)})
Результат: data_url
Вот ссылка 2 с использованием фреймворка ActionLink:
@Ajax.ActionLink("Add 2", "x", "x", null, new AjaxOptions()
, new { data_url = Url.Action(...) })
Результат: data-url
Вот расширение, достаточно простое, , за исключением того, что единственный способ пропустить htmlAttributes, о котором я знаю, это использовать расширение ToDictionaryR()
. Я подозреваю, что это проблема, поэтому мне интересно, стоит ли мне использовать что-то еще. Я также предоставил это расширение ниже.
public static MvcHtmlString ActionLink(this AjaxHelper helper, string linkText
, RouteValueDictionary routeValues, AjaxOptions ajaxOptions
, object htmlAttributes = null)
{
return helper.ActionLink(linkText, routeValues["Action"].ToString()
, routeValues["Controller"].ToString(), routeValues, ajaxOptions
, (htmlAttributes == null ? null : htmlAttributes.ToDictionaryR()));
}
public static IDictionary<string, object> ToDictionaryR(this object obj)
{
return TurnObjectIntoDictionary(obj);
}
public static IDictionary<string, object> TurnObjectIntoDictionary(object data)
{
var attr = BindingFlags.Public | BindingFlags.Instance;
var dict = new Dictionary<string, object>();
foreach (var property in data.GetType().GetProperties(attr))
{
if (property.CanRead)
{
dict.Add(property.Name, property.GetValue(data, null));
}
}
return dict;
}
спасибо