可以返回View(模型)或json

时间:2016-06-07 10:39:09

标签: json asp.net-mvc-5

我有以下问题: 我有一个EDIT页面,它包含一些输入等等 - 没什么不寻常的。在提交按钮单击我必须验证服务器上的表单并执行以下操作之一:

  1. 如果有错误则返回模型
  2. 返回一些信息,说这一切都很好
  3. 为什么呢?因为当一切正常时我需要显示一个引导模态窗口。所以我所做的是(简化):

    [HttpPost]
    public ActionResult EditData(DataViewModel model)
    {
        ...
        if(!ModelState.IsValid)
            return View(model);
    
        return Json(new { success = true, message = "all good" }, JsonRequestBehavior.AllowGet);
    }
    

    有什么问题?我正在用javascript发布表单并等待这样的答案:

    {
        $(document).on('click', '#submitButton', function () {
            $.ajax({
                dataType: "json",
                url: "/Controller/EditData",
                type: "POST",
                data: $('#submitForm').serialize()
            }).done(function (data) {
                console.log(data.success + ' ' + data.message);
                if (data.success) {
                    $('#modalBody').text(data.message);
                    $('#modal-window-add').modal('show');
                }
            });
        });
    }
    

    因为你可以看到它确实显示了模态窗口,但是当模型进入时它没有做任何事情。在后一种情况下,尽管响应来了,但完全没有任何反应。

    还有其他选择可以解决我的问题吗?一般来说,我必须在成功编辑和模态关闭时显示模态窗口我需要重定向到另一个页面 - 这很容易。我尝试在json中包含模型,但它不起作用,手动检查所有字段然后在未通过验证的输入下显示这些红色错误似乎很多工作。我与经验丰富的朋友讨论过,但他们没有任何基于MVC的解决方案。有什么想法吗?

    祝你好运, 丹尼尔

2 个答案:

答案 0 :(得分:0)

用户Ajax为了做这项工作

@{
var ajaxOptions = new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "modal", OnBegin = "onAjaxBegin", OnComplete = "OnAjaxComplete", OnSuccess = "OnAjaxSuccess" };
}

@using (Ajax.BeginForm("Controler", "EditData", ajaxOptions, new { enctype = "multipart/form-data" }))
{
//write html here with model values
}

COntroller方法

[HttpPost]
public ActionResult EditData(DataViewModel model)
{
if(!ModelState.IsValid)
    return View(model);
}

Javascript

function OnAjaxSuccess()
{
show hide model popup
}

答案 1 :(得分:0)

$.ajax有一个dataType选项(您希望从服务器返回的数据类型。)

$.ajax功能中,您添加了选项dataType: "json",这意味着您希望从服务器返回json,这样您只能获得 json而不是其他数据类型例如xmlhtmltextscript

根据您的情况,您希望返回jsonhtml,具体取决于型号是否有效,您可以删除dateType选项< / strong>来自$.ajax函数,因为如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本将执行脚本,其他任何内容将作为字符串返回)。