我有一个工作的Ajax.RouteLink,我想添加一个片段。我无法找出正确的语法。
没有片段的工作路线:
return Ajax.RouteLink(
linkText,
routeName,
new { caseNo = caseNo, controller = controllerName, option = contentOption },
new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess },
new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") });
编译器错误RouteLink with fragment:
return Ajax.RouteLink(
linkText: linkText,
routeName: routeName,
protocol: null,
hostName: null,
fragment: fragment,
routeValues: new { caseNo = caseNo, controller = controllerName, option = contentOption },
ajaxOptions: new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess },
htmlAttributes: new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") }
);
routeValues和htmlAttributes的错误。无法转换为匿名类型。
我试过了:
routeValues: new System.Web.Routing.RouteValueDictionary() { caseNo = caseNo, controller = controllerName, option = contentOption }
然后编译器抱怨我的路由参数(caseNo,controller,option)。
另外,将协议和主机名保留为null是可以的,因为我没有更改这些吗?
答案 0 :(得分:1)
我看到的唯一问题是你在htmlAttributes中使用 Class
来调用你发布的Ajax.RouteLink
。您无法使用Class
,因为它是一个保留字。解决方法是以@
为前缀,即@class
。
对不起,你是对的。我认为,通过语法高亮,我被欺骗了。无论如何,再看看之后,我发现了你的问题。我没有亲自使用任何Ajax.*
助手,所以我不熟悉他们的签名。所以我看了the MSDN documentation on the extension method。简单地说,没有重载允许为fragment
和routeValues
传递htmlAttributes
和匿名对象。如果您要使用fragment
版本,则必须分别为RouteValueDictionary
和IDictionary<string, object>
传递routeValues
和htmlAttributes
。
您与RouteValueDictionary
的问题在于,您需要使用字典成员进行初始化,因此{ "caseNo", caseNo }
而不是caseNo = caseNo
。