我有一个函数,该函数会使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”。它带有下划线。我想知道为什么会这样,是否没有办法进行转换?

最佳答案

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

从MSDN:


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

关于c# - 在MVC和htmlAttributes中重载ActionLink,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14393053/

10-09 01:27