Ajax.BeginForm返回Json的消息
问题描述:
我正在使用jquery unobtrusive ajax和MVC Ajax.Beginform()来验证通过C#服务器端的窗体。 我总是用自己替换表单。Ajax.BeginForm返回Json的消息
这是所有工作正常,但我想知道:
比方说,我的形式引发了“保存到数据库”行动,这次行动取得了成功。在表单中没有错误,所以我不想将表单发送回客户端,而是在前端触发成功对话框的JSON消息。问题在于表单替换总是在发生。当我从服务器获得json时,我怎么能强制它不取代我的表单?
我想我问的是:我怎么不能更新div但只是做一些其他的代码呢?
我知道onSuccess,但它在DIV替换后被解雇,我想跳过替换。
答
对于这种功能,您应该使用jQuery ajax来发布表单而不是Ajax.Beginform。 Ajax.BeginForm的要点是发布表单并更新给定的目标。如果要返回部分视图或JSON对象,则应该使用jQuery执行页面替换和成功对话框触发。
答
您可能要实现自定义的替换功能
- 服务器端:
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);
}
}
}
演出便代码:) – 2014-12-05 20:18:13
我可以的,如果你真的需要它,但它的所有加工。我没有问题,但只是一个问题:-) – PoeHaH 2014-12-05 20:19:30