0

我有一个工作的 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:

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,控制器,选项)。

另外,是否可以将协议和主机名保留为空,因为我没有更改它们?

4

1 回答 1

1

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

对不起,你是对的。我想,我被语法高亮给骗了。无论如何,再看一遍后,我发现了你的问题。我个人不使用任何Ajax.*助手,所以我不熟悉他们的签名。因此,我查看了有关扩展方法的 MSDN 文档。简单地说,没有允许为and传递 afragment 匿名对象的重载。如果要使用版本,则必须分别通过和for和。routeValueshtmlAttributesfragmentRouteValueDictionaryIDictionary<string, object>routeValueshtmlAttributes

您遇到的问题RouteValueDictionary是您需要使用字典成员实际初始化,{ "caseNo", caseNo }而不是caseNo = caseNo.

于 2014-08-28T14:18:00.810 回答