1

我有一个重载 actionlink 的函数,并简单地向路由值“ID”添加一个新参数,我在整个地方都在使用它。

到目前为止,这是我的代码:

public static MvcHtmlString ReportActionLink(this HtmlHelper helper, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
{
    RouteValueDictionary routeValueDictionary = new RouteValueDictionary(routeValues);
    routeValueDictionary.Add("id", HttpContext.Current.Request.RequestContext.RouteData.Values["id"]);

    IDictionary<string, object> attrs = new RouteValueDictionary(htmlAttributes);

    return helper.ActionLink(linkText, actionName, controllerName, routeValueDictionary, attrs);        
}

如您所见,我传入了 routeValues,将它们转换为字典并添加我的 ID。

当我将我的 htmlAttributes 转换为 IDictionary 时会出现问题,因为重载方法期望它不会替换我的属性中的下划线,即

data_event = "something" 不会像匿名类型那样变成 data-event = "something"。它使用下划线呈现。我想知道为什么会这样,如果没有办法转换它?

4

1 回答 1

4

您只需要传递htmlAttributes对象,HtmlHelper.AnonymousObjectToHtmlAttributes而不是使用提供的RouteValueDictionary构造函数。

来自 MSDN:

返回值
类型:System.Web.Routing.RouteValueDictionary
下划线字符替换为连字符的 HTML 属性。

于 2013-01-18T05:52:31.720 回答