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)
其中d有AppId和UserId.
我们现在要做的是为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搜索时很难找到例子.我们感谢您提供的任何帮助!
代替:
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)
我忘记了我在没有接受答案的情况下留下了这个。
simonlchilds 已经解决了这个问题,我们将其包含Controller在通话中。
所以最后的调用看起来像:
window.location.href = "/StatsLocation/Visualization/appId=" + d.AppIdentifier + "/userId=" + d.DeviceId
Run Code Online (Sandbox Code Playgroud)
其中StatsLocation是控制器的名称。
这是一个愚蠢的错误,但至少它有一个简单的解决方案,也许可以帮助某人。