Jquery post方法不起作用

时间:2011-05-28 14:03:08

标签: jquery asp.net-mvc-3

这是jquery代码:

$(function () {
            $("#personCreate").click(function () {

                var person = getPerson();

                // poor man's validation
                if (person == null) {
                    alert("Specify a name please!");
                    return;
                }

                // take the data and post it via json
                $.post("banner/save", person, function (data) {
                    // get the result and do some magic with it
                    alert("Post");
                    var message = data.Message;
                    $("#resultMessage").html(message);
                });
            });
        });

控制器:

            [HttpPost]
            public ActionResult Save(PersonModel person)
            {
                string message = string.Format("Created {0} in the system",person.Name);
                return Json(new PersonViewModel {Message = message });
            }

当我点击按钮时,没有动作。帖子永远不会指向控制器。

3 个答案:

答案 0 :(得分:1)

像这样的硬编码网址总是看起来很可疑:

$.post("banner/save", ...

使用网址时,请确保始终使用网址帮助程序生成网址:

$.post("@Url.Action("save", "banner")", ...

您应该寻找的其他内容是FireBug中的控制台选项卡,因为它将为您提供有关AJAX请求的重要信息:究竟是什么发送到服务器以及收到的内容并希望指向错误。

此外,您还没有显示此getPerson()函数,但在当天结束时,发布的对象应如下所示:

var person = { prop1: 'value 1', prop2: 'value 2', .... };

其中显然Prop1,Prop2,...是PersonModel的属性。

您应该注意的另一件事是#personCreate按钮。如果这是提交按钮或锚链接,则应确保通过在单击处理程序中返回false来取消默认操作,或者您的ajax可能永远没有时间执行:

$("#personCreate").click(function () {

    // ... the AJAX request here

    return false;
});

答案 1 :(得分:0)

我不确切知道您的路由是如何设置的,但您没有以正确的方式传递person变量。

如果您需要发送banner/save/##的值为person),则需要

$.post("banner/save/" + person, function (data) { 

如果您需要发送banner/save?person=#(同上#),则需要

$.post("banner/save", {person: person}, function (data) {

如果您只是传递该值,jQuery将在其上运行jQuery.param,这将导致发送到服务器的空字符串。显然这不会叫你的控制器。

答案 2 :(得分:0)

问题可能是事件未正确附加到按钮上:您是否尝试过这样的事情?

为了确保事件被触发,你应该使用firebug

$(document).ready(function () {
            $("#personCreate").click(function () {

                var person = getPerson();

                // poor man's validation
                if (person == null) {
                    alert("Specify a name please!");
                    return;
                }

                // take the data and post it via json
                $.post("banner/save", person, function (data) {
                    // get the result and do some magic with it
                    alert("Post");
                    var message = data.Message;
                    $("#resultMessage").html(message);
                });
            });
        });