jQuery美元.ajax将空值传递给MVC控制器



我一直在努力解决这个问题相当长的一段时间。针对类似的问题,我已经按照他们的建议做了,但都没有成功。

如标题所示,我的$.ajax传递的数据没有被我的控制器接收。

jQuery:

var data = {
    id: id,
    app: app
};

    $.ajax({
        type: "POST",
        url: "/Utility/FetchTransactionLog",
        data: JSON.stringify(data),
        contentType: "application/json;",
        success: function (data) {
            if (data) {
                h.resultDiv.html(data);
            }
            else {
                h.resultDiv.html("");
                alert("No Log Found");
            }
        }
    });

控制器:

//id and app receives null values
public ActionResult FetchTransactionLog(string id,string app) {
    UtilityModels util = new UtilityModels(app);
    List<ResultModel> result = util.FetchTransactionLog(id);
    return View("LogResult", result);            
}

Route in Global.asax:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Utility", action = "Index", id=UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
     "FetchLog",
     "Utility/FetchTransactionLog/{id}/{app}",
     new { controller = "Utility", action = "FetchTransactionLog", id = "", app = "" } // Parameter defaults
 );      

我做错了什么?

以下是Samich建议的作品:

$.ajax({
            type: "POST",
            url: "/Utility/FetchTransactionLog/" + id + "/" + app,
            data: "{}",
            contentType: "application/json;",
            success: function (data) {
                if (data) {
                    h.resultDiv.html(data);
                }
                else {
                    h.resultDiv.html("");
                    alert("No Log Found");
                }
            }
        });

试着把你的id和app添加到你的url中,就像你在路由/Utility/FetchTransactionLog/{id}/{app}

中指定的那样

可能是因为你的路由需要在查询字符串中找到值,但没有找到,所以路由注册提供的默认值

为什么做JSON ?对数据进行字符串化?你应该按原样传递对象,比如

data: data,

文档明确指出,如果传入一个对象,它将自动转换为字符串。通过传入字符串包含 JSON,您混淆了jQuery,它最终将垃圾数据传递给ASP(使用浏览器的开发人员工具来检查请求会立即使此明显)。

你的data不应该是一个JSON字符串,只是把它作为一个Javascript对象。jQuery会将其转换为POST参数,然后控制器就可以读取了。

$.ajax({
    type: "POST",
    url: "/Utility/FetchTransactionLog",
    data: data,
    success: function (data) {
        if (data) {
            h.resultDiv.html(data);
        }
        else {
            h.resultDiv.html("");
            alert("No Log Found");
        }
    }
});

我现在不能测试这个,但试着改变-

data: JSON.stringify(data), 

data: data,

JSON.stringify将以一种阻止jQuery正确发布的方式格式化您的数据。如果你传递的是一个普通的对象,那么一切都应该像预期的那样工作。

试试这个:

 $.ajax({
    type: "POST",
    url: "/Utility/FetchTransactionLog",
    data: { id: id, app: app },
    contentType: "application/json;",
    success: function (data) {
        if (data) {
            h.resultDiv.html(data);
        }
        else {
            h.resultDiv.html("");
            alert("No Log Found");
        }
    }
});

最新更新