我正在使用jquery unobtrusive ajax和MVC Ajax.Beginform()来通过C#服务器端验证表单。 我总是用自己替换表单。
一切正常,但我想知道:
让我们说我的表单正在触发"保存到数据库"行动和这个行动成功了。表单中没有错误,因此我不希望将表单发回给客户端,而是在前端触发成功对话框的JSON消息。问题是表单替换总是在发生。当我从服务器上取回json时,如何强制它不要替换我的表单?
我想我要问的是:我怎么能不更新div而只是做一些其他代码?
我知道onSuccess,但是在DIV替换之后被解雇了,我想跳过替换。
答案 0 :(得分:1)
你应该jQuery ajax发布表单而不是Ajax.Beginform这种功能。 Ajax.BeginForm的意思是发布表单并更新给定目标。如果要返回部分视图或JSON对象,则应使用jQuery执行页面替换和成功对话框触发。
答案 1 :(得分:0)
您可能必须实现自定义替换功能
1)创建一个响应模型,其中包含您的响应状态以及相应的消息
public class ReposnseModel
{
public bool isSuccess {get; set;}
public string SuccessMessage {get;set;}
public string ErrorMessage {get;set;}
}
2)您的表单必须通过部分视图呈现,因此您只能返回其内容
public ActionResult DoWork(Model model)
{
//if success:
...
return Json(new ReposnseModel{isSuccess = true, SuccessMessage = "Success"});
//if lets say model is not valid or some other error:
return PartialView("YourPartialViewForm",model)
}
使用以下内容注册Ajax.BeginForm onSuccess回调:
function Callback(data) {
if (data != null) {
if (data.isSuccess != undefined) { //means that the data is a serialized ReposnseModel and not a form content
if (data.isSuccess) {
alert(data.SuccessMessage);
}else
{
alert(data.ErrorMessage);
}
}
else { //otherwise data is a form content, so it needs to replace the current content
$('#formContainer').html(data);
}
}
}