从ajax调用中显示不同的视图

时间:2014-07-04 13:00:14

标签: jquery ajax asp.net-mvc

我有一个Test视图,显示一个复选框表,用户可以从中选择一个或多个要运行的测试。

我希望这些测试在不同的视图中运行,以便我可以为每次测试运行显示错误和警告。

在Test视图中,我正在对RunTest控制器进行ajax调用:

        var testsToRun = [];

        // Enumerate Test checkboxes
        var chk = document.getElementsByName('test');
        var len = chk.length;

        for (var i = 0; i < len; i++) {
            if (chk[i].type === 'checkbox'
            && chk[i].checked) {
                var test = new Object();
                test.Action = chk[i].id;
                testsToRun.push(test);
            }
        }

        if (testsToRun.length > 0) {
            $.ajax({
                url: "@Url.Action("Index", "RunTest")",
                type: 'POST',
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify({ 'testsToRun': testsToRun}),
                cache: false,
                success: function (result) {
                },
                error: function (result) {
                }
            });
        }

这一切都有效。我的RunTests控制器的Index方法按预期调用。

RunTests控制器的Index方法然后返回RunTest视图:

    public ActionResult Index(List<Test>testsToRun)
    {
        return View("~/Views/RunTest.cshtml");
    }

我在return语句上设置了一个断点,我的代码到达那里,但RunTest视图从不显示。我的测试视图仍然是显示的视图。

我已经研究了RedirectToAction方法之类的东西,但似乎没有任何工作,因为我可能甚至没有找到合适的区域。

1 个答案:

答案 0 :(得分:1)

您尝试使用jQuery的$.ajax方法而不在回调中执行任何操作。它没有等同于普通html POST表单的target= attribute;相反,您应该在success和/或error回调中处理它,例如:

success: function(data, status, jqXHR) {
    $(myContainer).html(data);
}

更多可用信息in the documentation.

聚苯乙烯。我认为return View(...的返回类型应该是dataType: "html"而不是dataType: "json",但我可能错了。

PPS。考虑使用short-hand post,因为它更具可读性