【问题标题】:Calling an MVC Action with JQuery AJAX that doesn't return Json (instead another view)使用不返回 Json(而不是另一个视图)的 JQuery AJAX 调用 MVC 操作
【发布时间】:2011-06-02 22:11:11
【问题描述】:

所以我的控制器中有一个 MVC 操作

public System.Web.Mvc.ActionResult Link(LinkType type)
        {
            switch (type)
            {
                case LinkType.IC:
                    return RedirectToAction("Indication", "IndicationsController");
                    break;
                case LinkType.Pricing:
                    break;
                case LinkType.Sheets:
                    break;
                case LinkType.Analysis:
                    break;
                case LinkType.Admin:
                    break;
                default : 
                    break;
            }

            return View(@"~\Views\Indications\ShowAString.aspx", "", "Page is not available for selection.");
        }

我想从 JQuery 调用这个动作,传递被点击按钮的整数值。所以我的按钮点击方法中有这个:

$('#btnIc').live('click', function () {
        var typeJSON = {};
        typeJSON["type"] = 1;
        $.ajax({
            type: "POST",
            url: "<%= Url.Action("Link", "Home") %> ",
            dataType: "jsonData",
            data: typeJSON,
            success: function(data) {

            }
        });
    });

这会重定向页面还是等待我对(数据)做某事?

这是正确的做法吗?

【问题讨论】:

  • 你为什么不返回 JsonResult 而不是视图?
  • 不是 asp 专家,一点也不,但是......我没有看到任何暗示输出应该是 json 编码的事实

标签: .net jquery asp.net-mvc ajax redirect


【解决方案1】:

在 AJAX 请求中返回整个视图几乎总是不可行的。相反,您希望返回 XML、JSON 或一大段 HTML。您可以通过在 Controller 中调用 PartialView() 返回部分 HTML 来返回一段 HTML。

如果您返回 HTML,那么您的 jQuery AJAX 请求需要期待它,因此将其 dataType 更改为 html。然后在 jQuery 回调中,您可以获取接收到的 HTML 并将其附加到您的页面某处。

注意:您可以使用Request.IsAjaxRequest() 返回 AJAX 数据或完整视图,并对两种请求使用相同的操作。这有助于渐进式增强。

【讨论】:

  • 我想调用一个返回另一个视图的动作。基本上,这是一个主页,我想根据按钮选择要重定向到的其他页面。
  • 但是你不能用 AJAX 做这样的重定向。您的 AJAX 请求将被重定向,它最终会从服务器接收一些东西,但客户端的浏览器将保持不变。如果你想重定向,你可能根本不需要 AJAX。
  • 嗯,好吧。所以我会做一个正常的重定向吗?
  • 很难说,我需要看看你的代码和你的意图。但一般来说,AJAX 是用于更新当前页面的部分。如果你想把用户带到一个全新的页面,你可能只想做一个普通的 HTTP 请求。
【解决方案2】:

为什么不这样做

public ActionResult Link(LinkType type)
{
  var obj = ...; //Object that you get from the LinkType. Whatever ShowAString returns.
  return Json(obj);
}

【讨论】:

    【解决方案3】:

    您没有返回 json,看起来您正在重定向到另一个可能返回视图的操作。您需要将操作的类型设置为 JsonResult 并在那里返回您的 json 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-24
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2016-08-15
      • 2013-08-10
      • 1970-01-01
      相关资源
      最近更新 更多