jQuery $ .ajax将null值传递给MVC Controller

时间:2011-09-20 10:02:20

标签: jquery asp.net-mvc-2

我一直在努力解决这个问题。我已经按照类似问题提供的所有建议但没有成功。

正如标题所说,我的$.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);            
}

在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");
                }
            }
        });

5 个答案:

答案 0 :(得分:2)

尝试将您的ID和应用附加到您在网址/Utility/FetchTransactionLog/{id}/{app}

中指定的网址

可能是因为您的路由需要查询字符串中的值而在那里找不到它,所以路由注册提供的默认值

答案 1 :(得分:1)

为什么要对您的数据进行JSON.stringify?您应该按原样传递对象,例如

data: data,

documentation表示,如果你传入一个对象,它将自动转换为一个字符串。通过传入包含 JSON的字符串,您会混淆jQuery并最终将垃圾数据传递给ASP(使用浏览器的开发人员工具来检查请求会立即进行这很明显)。

答案 2 :(得分:1)

您的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");
        }
    }
});

答案 3 :(得分:0)

我现在无法测试,但尝试更改 -

data: JSON.stringify(data), 

data: data,

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

答案 4 :(得分:0)

试试这个:

 $.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");
        }
    }
});