【问题标题】:Json value is not getting passed to MVC controller from AJAX callJson 值没有从 AJAX 调用传递到 MVC 控制器
【发布时间】:2019-12-17 09:06:15
【问题描述】:

我有这个 AJAX 调用,我试图在我的项目中调用部分视图。

function ImportBundle() {
        var req = { "from": "bundle" };
        $.ajax({
            async: true,
            type: "GET",
            url: "Client/ZWS/{lang}/ImportBundles",
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(req),
            dataType: 'html',
            success: function (data) {
                $(".viewdiv").html(data);
            },
            failuere: function () { alert("fail"); }
        });
    }

这是我的项目控制器:

[System.Web.Http.HttpGet]
        public ActionResult ImportBundles([FromUri] string from)
        {
            return PartialView("~/Views/_ViewImportBundles.cshtml");
        }

但是,当我调试应用程序时,我得到了 null。

知道为什么吗?谢谢!

【问题讨论】:

  • 您是否尝试将数据放入变量中? data: {someVar : JSON.stringify(req) } 那就是你的控制器变量名 ImportBundles(string someVar)
  • 像这样: var req = { "from": "bundle" };数据:{ myVar : JSON.stringify(req) } ?
  • 也试过了。不工作:(
  • 您是否尝试过使用 url: "Client/ZWS/{lang}/ImportBundles?from=bundle" ?在 GET 请求中,您将参数作为查询字符串的一部分传递。
  • 你知道控制器是否被调用了吗?在其中设置一个断点。可能是网址错误。

标签: asp.net json ajax asp.net-mvc model-view-controller


【解决方案1】:

我试过了,效果很好。也许这可以帮助您朝着正确的方向前进。

    function ImportBundle() {

        var req = { "from": "bundle" };

            $.ajax({
                async: true,
                type: "POST",
                url: "/Client/ImportBundles",
                data: { theData: JSON.stringify(req) },
                dataType: 'html',
                success: function (data) {
                    alert("Worked");
                },
                failuere: function () { alert("fail"); }
        });

     }

    [HttpPost]
    public ActionResult ImportBundles(string theData)
    {
        return null;
    }

变量 theData 包含 json。如果你能做到这一点,你可以一次修改代码以满足你的需要。

【讨论】:

    【解决方案2】:
    function ImportBundle() {
            var req = { "from": "bundle" };
            $.ajax({
                async: true,
                type: "GET",
                url: "Client/ZWS/{lang}/ImportBundles",
                contentType: 'application/json; charset=utf-8',
                data: req,
                dataType: 'html',
                success: function (data) {
                    $(".viewdiv").html(data);
                },
                failure: function () { alert("fail"); }
            });
        }
    

    对于 url,可以使用 Url.Action 辅助方法。

    【讨论】:

    • 不幸的是,我不能。我的网址有 {lang} 在运行时获取数据。但是,@Url.Action 并没有这样做。另外,我尝试了数据:req,。不工作:(
    • 使用您粘贴的代码,我怀疑 ajax 调用甚至可能不会触发您的 MVC 操作。如果您能够在该 MVC 操作中获得断点,那么我将检查项目中定义的任何自定义路由。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2013-12-13
    • 2021-12-28
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多