Правильно сделать расширение ActionLink с помощью htmlAttributes

Я использую собственное расширение для моих ссылок 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;
}

благодарю вас

Ответы на вопрос(1)

Ваш ответ на вопрос