用参数MVC 4 javascript调用动作方法

dan*_*130 5 javascript redirect asp.net-mvc-4

我很累,很傻,但这是我的编码问题:

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

动作方法"声明"如下所示:

public ActionResult Visualization(String appId = "", String userId = "")
Run Code Online (Sandbox Code Playgroud)

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

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

其中dAppIdUserId.

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

我们尝试过这样的事情:

window.location.href = "/StatsLocationController/Visualization/appId=" + d.AppIdentifier + "/userId=" + d.DeviceId
Run Code Online (Sandbox Code Playgroud)

我们也尝试使用window.location.replace(),但没有一个工作,我想我们还没有找到actionLink的正确语法,但是在google搜索时很难找到例子.我们感谢您提供的任何帮助!

sim*_*lds 7

代替:

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

尝试:

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

假设您已正确设置路由?

编辑:

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

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

第二次编辑

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

@Url.Action("Visualization", "StatsLocation", new{ appId=d.AppId, userId=d.UserId})
Run Code Online (Sandbox Code Playgroud)


dan*_*130 2

我忘记了我在没有接受答案的情况下留下了这个。

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

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

window.location.href = "/StatsLocation/Visualization/appId=" + d.AppIdentifier + "/userId=" + d.DeviceId
Run Code Online (Sandbox Code Playgroud)

其中StatsLocation是控制器的名称。

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

  • 您回答了自己的问题,说我的答案解决了问题,然后接受了您自己的答案 - 似乎是合法的 (4认同)