1

我正在尝试使用 jQuery 将两个值传递给以下控制器操作

[HttpPost]
        public JsonResult Cancel(Guid Id, string cancelReason)
        {
            //do something
        }

.js:

    CancelProgram = function (Id) {
//this is basically the value from a select tag placed on the form            
var reason = $("#CancelReasons").val();
            alert(reason);

            Origin.ajax({
                url: '/ZYX/Cancel?Id=' + Id,
                type: 'POST',
                dataType: 'json',
                data: { cancelReason: reason },
                success: function (data) {
                    alert('success!');
                }
            });
        };
    });

action 方法中的 cancelReason 的值始终为 null。关于为什么这不起作用的任何指示?

4

4 回答 4

4

您的代码的另一部分一定有问题。我将首先通过硬编码值并确保它们被正确发送来发送正常的 AJAX 请求:

$.ajax({
    url: '/ZYX/Cancel',
    type: 'POST',
    data: { 
        id: '24fe0c97-c227-4312-91fc-6e651df8b64f', 
        cancelReason: 'some reason' 
    },
    success: function (data) {
        alert('success!');
    }
});

一旦您确保这个简单的示例有效,就可以开始使用变量使其更具动态性。这样,您将能够缩小范围并找到问题的根源。此外,我强烈建议您使用 javascript 调试工具,例如 FireBug。它允许您在控制台中查看您是否有 javascript 错误以及许多其他有用的信息,例如正在发送的确切请求/响应。

如果 AJAX 请求成功,您应该在 FireBug 的“网络”选项卡中看到:

Accept:             */*
Accept-Encoding:    gzip, deflate
Accept-Language:    en-us,en;q=0.5
Connection:         keep-alive
Content-Length:     64
Content-Type:       application/x-www-form-urlencoded; charset=UTF-8
User-Agent:         Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0
X-Requested-With:   XMLHttpRequest

id=24fe0c97-c227-4312-91fc-6e651df8b64f&cancelReason=some+reason

请注意如何使用 发送idcancelReason参数application/x-www-form-urlencoded

你真的应该学会调试这类问题,调试它们的方法是使用适当的工具。

于 2012-04-13T21:40:00.090 回答
1

关于什么

            url: '/ZYX/Cancel',
            type: 'POST',
            dataType: 'json',
            data: { Id: Id, cancelReason: reason },
            success: function (data) {
                alert('success!');
            }
于 2012-04-13T21:13:42.587 回答
0

您需要提供您指定的路线,这可能有助于更好地回答,但是现在应该可以:

url: '/ZYX/Cancel?Id=' + Id + '&cancelReason=' + reason,

而且,根本不要传递任何数据。如果这不起作用,那么我将使用 fiddler 或其他网络观察程序插件或调试器来验证原因是有效值。

于 2012-04-13T21:21:16.417 回答
-2

尝试在 Global.asax 文件中设置路由,例如:

routes.MapRoute(
            "Cancel", // Route name
            "{controller}/{action}/{id}/{cancelReason}", // URL with parameters
            new { controller = "YourController", action = "Cancel", id = UrlParameter.Optional, cancelReason = UrlParameter.Optional } // Parameter defaults
        );
于 2012-04-13T21:24:30.880 回答