我在ASP.NET MVC 3(C#)中使用下面的Controller方法返回一个PartialView:
public ActionResult InsertEmail(long idPerson)
{
PersonEmailViewModel mail = new PersonEmailViewModel();
mail.email.Person_idPerson = idPerson;
return PartialView(mail);
}
我需要在提交表单上执行的方法是:
[HttpPost]
public ActionResult InsertNewEmail(PersonEmail mail)
{
mail.idPersonEmail = mail.Insert(mail);
return Json(mail);
}
我的partialView包含以下代码:
@model PlatformLib_MySql.BLL.Person.PersonEmailViewModel
<form action="" id="frmNewEmail" method="post">
<div>
E-mail: @(Html.TextBoxFor(m => m.email.email))
@(Html.HiddenFor(m => m.email.Person_idPerson))
<input type="submit" value="Insert" id="btnSubmitMailInsert" />
<input type="button" value="Cancel" id="btnCancelMailInsert" />
</div>
</form>
在我的JS文件中,我在#btnSubmitMailInsert按钮上运行此代码:
jQuery("#btnSubmitMailInsert").click(function () {
submitNewEmail();
window.location.reload();
});
function submitNewEmail() {
event.preventDefault();
var mail = {
email: jQuery("#frmNewEmail #email_email").val(),
Person_idPerson: jQuery("#frmNewEmail #email_Person_idPerson").val()
};
var request = jQuery.ajax({
url: '/Person/InsertNewEmail',
data: mail,
type: 'POST',
dataType: 'json',
cache: false
});
request.done(function (msg) {
console.log(msg);
});
request.fail(function (msg) {
console.log(msg);
});
}
我的问题主要集中在Ajax请求上。我很少能做出“快乐的方式”,在提交点击时,在jQuery上激活事件,调用方法“submitNewEmail()”,调用Ajax,在控制器上执行方法并成功传递。但不是这样......它总是返回失败,不是因为控制器方法返回错误,而是因为ajax无法正常运行,不执行控制器上的方法,即使插入了断点(在VS2010上)。 在我发布的这个JS代码中,这是尝试替代解决这个问题,不成功。 原始代码是:
jQuery.ajax({
url: '/Person/InsertNewEmail',
data: mail,
type: 'POST',
dataType: 'json',
cache: false,
success: function (result) {
debugger;
jQuery("#tblEmail").append("<tr><td>Email inserido</td></tr>");
},
error: function () {
debugger;
alert("Erro ao inserir e-mail.");
}
});
我暂时离开了“console.log(msg)”,只是为了解决这个问题。
有人可以告诉我发生了什么,或者指出我的错误在哪里?
答案 0 :(得分:0)
我发现了问题。一切都是正确的,但一些细节损坏了代码:window.location.reload();
我在代码中做了一些更改,看起来像是这样:
jQuery.ajax({
url: '/Person/InsertNewEmail',
data: mail,
type: 'POST',
dataType: 'json',
cache: false
}).done(function (data) {
// Do something
});
另一种方式也是正确的,唯一相关的变化是:
jQuery("#btnSubmitMailInsert").click(function () {
event.preventDefault();
submitNewEmail();
// window.location.reload // -> Commented for testing and everything worked fine.
});
感谢您试图帮助我。这对我帮助很大。