我有一个函数,该函数会使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/