返回值以及mvc中的部分视图ajax调用



我正在进行mvc4项目。我正在使用Dexexpress网格。我想做的是当我点击add。。我调用ajax来检查用户是否在数据库中。。如果没有,则保存到数据库中。。我正在返回网格的初始视图,以使用最新数据刷新网格。

但我也想返回一些值和gridview部分。。这样我就可以显示该用户是否已经添加。

例如:ajax调用的Jquery代码

function AddUser() {
    showProgress();
    $.ajax({
        url: 'ManageUsers/AddUsers/?id=' + Math.random(),
        data: $("#frmManageUsers").serialize(),
        type: 'Post',
        datatype: 'json',
        success: function (data) {
            if (data != '') {                
                $("#grid").html('');
                $("#grid").html(data);
            }
            else
                alert('No Record Found');
        },
        error: function (request, status, error) { ShowErrorMessage(); },
        complete: function () { hideProgress(); ShowSuccessMessage(); }
    });
}  

和控制器

public ActionResult AddUsers(Usertable model)
        {
            int successid = ManageUserExecutor.Save(model);
            if (successid == -1)
            {
                List<usp_GetListOfUsers_Result> objList = new List<usp_GetListOfUsers_Result>();
                return PartialView("GridViewPartial", objList);
            }
            else
                return RedirectToAction("GridViewPartial");
        }

我想要的是,如果我能在ajax retrun和gridview partial html中获得successid的值。。。这样我就可以根据这个显示消息了。。

如果操作失败,只需将其作为JSON结果返回:

public ActionResult AddUsers(Usertable model)
{
    int successid = ManageUserExecutor.Save(model);
    if (successid == -1)
    {
        List<usp_GetListOfUsers_Result> objList = new List<usp_GetListOfUsers_Result>();
        return PartialView("GridViewPartial", objList);
    }
    else
    {
        return Json(new { id = successid });
    }
}

以及您的AJAX调用:

function AddUser() {
    showProgress();
    $.ajax({
        url: 'ManageUsers/AddUsers', // <!-- TODO: This url should NOT be hardcoded like that. It should be generated by a server side helper
        cache: false, // <!-- That's what should be used instead of reinventing wheels with Math.random stuff
        data: $("#frmManageUsers").serialize(),
        type: 'POST',
        success: function (data) {
            if (data.id) {
                // the controller action returned a JSON result with id property =>
                // handle it here
                alert('Sorry, an error occurred, successid: ' + data.id);
            } else {
                // The operation succeeded and the controller action returned a partial
                // view => update your DOM here
                $("#grid").html(data);
            }
        }),
        error: function (request, status, error) { ShowErrorMessage(); },
        complete: function () { hideProgress(); ShowSuccessMessage(); }
    });
}  

还要注意,我已经去掉了您请求中的datatype: 'json',参数。这在两个方面是错误的:

  1. 正确的属性称为dataType而不是datatype
  2. 由于控制器操作可以返回HTML或JSON(取决于操作是否成功),我们让jQuery使用web服务器设置的Content-Type响应HTTP头来自动推断正确的类型,并解析传递给success回调的data变量
public ActionResult AddUsers(Usertable model)
{
    var viewModel = new ReturnValue();
    int successid = ManageUserExecutor.Save(model);
    if (successid == -1)
    {
        viewModel.Message= "Failed"; 
        viewModel.ViewString = this.RenderViewToString("GridViewPartial", objList);
    }
    else
    {
        viewModel.Message= "Success";
        viewModel.ViewString = this.RenderViewToString("GridViewPartial");
    }
}

并使用data.ViewString访问渲染的局部视图html。

$("#grid").html(data.ViewString);

并使用data.Message访问您想要的消息。

$("#grid").html(data.Message);

您可以在这里找到RenderViewToString函数。

最新更新