如何在Ajax.RouteLink中使用片段?

时间:2014-08-28 13:43:02

标签: asp.net-mvc asp.net-ajax routelink

我有一个工作的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是可以的,因为我没有更改这些吗?

1 个答案:

答案 0 :(得分:1)

我看到的唯一问题是你在htmlAttributes中使用Class来调用你发布的Ajax.RouteLink。您无法使用Class,因为它是一个保留字。解决方法是以@为前缀,即@class

对不起,你是对的。我认为,通过语法高亮,我被欺骗了。无论如何,再看看之后,我发现了你的问题。我没有亲自使用任何Ajax.*助手,所以我不熟悉他们的签名。所以我看了the MSDN documentation on the extension method。简单地说,没有重载允许为fragmentrouteValues传递htmlAttributes 匿名对象。如果您要使用fragment版本,则必须分别为RouteValueDictionaryIDictionary<string, object>传递routeValueshtmlAttributes

您与RouteValueDictionary的问题在于,您需要使用字典成员进行初始化,因此{ "caseNo", caseNo }而不是caseNo = caseNo