6

我又累又笨,但这是我的编码问题:

我们正在使用 d3.js 在名为 Live 的 MVC4 操作方法中绘制谷歌地图元素。我们已经为 d3.js 元素实现了点击,需要从 javascript 重定向到另一个 MVC 操作方法。

动作方法“声明”如下所示:

public ActionResult Visualization(String appId = "", String userId = "")

在 javascript 中,我们在 d3.js 函数中有一个可以工作的代码片段,如下所示:

.on("click", function (d, i) {
        // just as an example use for the click-event. 
        alert(d.AppName); }

其中d也有AppIdUserId

我们现在要做的是为 click 事件创建一个重定向,调用 action 方法以及来自d的参数。这意味着当您单击 d3.js 元素时,您将被重定向到具有预设参数的另一个页面。

我们尝试过类似的事情:

window.location.href = "/StatsLocationController/Visualization/appId=" + d.AppIdentifier + "/userId=" + d.DeviceId

我们也尝试使用 window.location.replace(),但都没有奏效,我想我们还没有弄清楚 actionLink 的正确语法,但是在谷歌搜索时很难找到示例。我们感谢您能得到的任何帮助!

4

2 回答 2

8

代替:

window.location.href = Html.ActionLink("Visualization", "StatsLocationController", new{ appId=d.AppId, userId=d.UserId}, new{})

尝试:

window.location.href = '@Url.Action("Visualization", "StatsLocationController", new{ appId=d.AppId, userId=d.UserId})'

这是假设您已正确设置路由?

编辑:

可以使这项工作的路由类型类似于:

routes.MapRoute(
    "MyRoute", 
    "{controller}/{action}/{appId}/{userId}", 
    new {
         controller = "Home", 
         action = "Index", 
         appId = UrlParameter.Optional, 
         userId = UrlParameter.Optional 
    });

第二次编辑

我刚刚注意到你正在调用你的控制器StatsLocationController——除非你的 C# 类被调用StatsLocationControllerController——这是错误的。Asp.Net MVC 假设对于一个控制器,会有一个类被调用StatsLocationController,所以你应该引用你的控制器而不使用该Controller部分。所以在这个例子中你的控制器应该被调用StatsLocation,这将使 URL 看起来像这样:

@Url.Action("Visualization", "StatsLocation", new{ appId=d.AppId, userId=d.UserId})
于 2013-07-17T14:27:41.873 回答
3

我忘了我没有接受答案就离开了。

simonlchilds 已经解决了问题,我们Controller在通话中包含了 。

所以最后的调用看起来像:

window.location.href = "/StatsLocation/Visualization/appId=" + d.AppIdentifier + "/userId=" + d.DeviceId

StatsLocation控制器的名称在哪里。

如此愚蠢的错误,但至少它有一个简单的解决方案,也许它可以帮助某人。

于 2014-01-21T13:47:51.133 回答