这是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 });
}
当我点击按钮时,没有动作。帖子永远不会指向控制器。
答案 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);
});
});
});