【问题标题】:call action method with parameters MVC 4 javascript使用参数 MVC 4 javascript 调用操作方法
【发布时间】:2013-07-17 14:24:21
【问题描述】:

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

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

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

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

在 javascript 中,我们在 d3.js 函数中有一个代码 sn-p,它的工作原理如下:

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

其中 dAppIdUserId

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

我们尝试过类似的方法:

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

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

【问题讨论】:

    标签: javascript asp.net-mvc-4 redirect


    【解决方案1】:

    代替:

    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})
    

    【讨论】:

    • 不起作用,在 google chrome 控制台中我得到与 html.ActionLink 相同的错误。错误是“意外的标识符”,它似乎不理解我创建的新对象。如果我将鼠标悬停在 @url 上,Visual Studio 的智能感知也会告诉我“条件编译已关闭”。
    • 路由看起来如何?
    • 您是否确保将通话用引号括起来?如果没有,您将不会将string 分配给href 属性,这将使其崩溃。
    • 感谢您的帮助,因为我的工作日即将结束,我明天将对此进行测试,如果我能正常工作,我会将您的答案标记为正确。
    • 最后一件事,@Url.Action 是 HTML 的 MVC 助手,对吗?我需要在 javascript 中创建 URL,因为我必须在 javascript 中进行重定向调用。
    【解决方案2】:

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

    simonlchilds 已经解决了问题,我们在调用中包含了Controller

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

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

    其中StatsLocation 是控制器的名称。

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

    【讨论】:

    • 你回答了你自己的问题,说我的答案解决了它,然后接受了你自己的答案 - 似乎合法
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多