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

时间:2013-11-23 16:07:32

标签: jquery asp.net-mvc-4

我正在研究mvc4项目。我正在使用Dexexpress网格。我想要做的是当我点击添加..我做ajax调用,以检查用户是否在数据库..如果没有保存到数据库和..我正在返回网格的paritial视图刷新网格与最新数据。

但是我想和gridview partial一起返回一些值...这样我就可以显示用户是否已添加。

例如: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中获得successid以及gridview部分html的价值......那么我可以根据那个显示消息..

2 个答案:

答案 0 :(得分:5)

如果操作失败,只需将其作为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标头自动推导出正确的类型并解析传递给data回调的success变量。

答案 1 :(得分:0)

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函数here