使用jQuery $ .ajax()和$ .post()将字符串数据发送到MVC控制器

时间:2009-12-03 21:24:16

标签: asp.net-mvc jquery controller

我必须缺少一些东西。我已经尝试使用$ .ajax()和$ .post()将字符串发送到我的ASP.NET MVC控制器,并且在到达Controller时,字符串在到达时为空。所以这是我试过的post方法:

$.post("/Journal/SaveEntry", JSONstring);

这是我尝试过的ajax方法:

$.ajax({
    url: "/Journal/SaveEntry",
    type: "POST",
    data: JSONstring
});

这是我的控制器:

public void SaveEntry(string data)
{
    string somethingElse = data;
}

对于后台,我使用JSON.stringify()序列化了一个JSON对象,这已经成功了。我正在尝试将它发送到我的Controller以反序列化()它。但正如我所说,字符串每次都以null结尾。有什么想法吗?

非常感谢。

更新:有人回答我的问题是我没有使用键/值对作为$ .post()的参数。所以我尝试了这个,但字符串仍然以无效的方式到达Controller:

$.post("/Journal/SaveEntry", { "jsonData": JSONstring });

6 个答案:

答案 0 :(得分:22)

回答。在第一次更新后,我没有正确设置变量名称。我将Controller中的变量名称更改为jsonData,因此我的新Controller标题如下所示:

public void SaveEntry(string jsonData)

我在JS中的帖子操作如下:

$.post("/Journal/SaveEntry", { jsonData: JSONstring });

JSONstring是一个“字符串化”(或“序列化”)JSON对象,我使用json.org提供的JSON plugin序列化。所以:

JSONstring = JSON.stringify(journalEntry);  // journalEntry is my JSON object

因此$ .post和Controller方法中的变量名必须是同一个名称,否则什么都不会起作用。很高兴知道。谢谢你的回答。

答案 1 :(得分:5)

最终答案:

似乎变量名称没有按照我在整理数据格式问题时在评论中建议的帖子排列(假设这也是一个问题。

  

实际上,请确保您使用的是   您的服务器端的正确密钥名称   代码正在寻找以及每个   Olek的例子 - 即。如果你的代码是   然后寻找可变数据   需要使用数据作为您的密钥。 -   prodigitalson 6小时前

     

@prodigitalson,有效。该   变量名称没有排队。将   你发布第二个答案,我可以   接受?谢谢。 - Mega Matt 6小时   前

所以他需要使用键/值对,并确保他从服务器端的请求中获取正确的变量。


data参数必须是键值对

$.post("/Journal/SaveEntry", {"JSONString": JSONstring});

答案 2 :(得分:1)

似乎错过了dataType。您也可以设置contentType以防万一。你会试试这个版本吗?

$.ajax({
    url: '/Journal/SaveEntry',
    type: 'POST',
    data: JSONstring,
    dataType: 'json',
    contentType: 'application/json; charset=utf-8'
});

干杯。

答案 3 :(得分:1)

感谢您的回答解决了我的噩梦。

我的网格

..
.Selectable()
.ClientEvents(events => events.OnRowSelected("onRowSelected"))
.Render();

<script type="text/javascript">
function onRowSelected(e) {
        id = e.row.cells[0].innerHTML;
        $.post("/<b>MyController</b>/GridSelectionCommand", { "id": id});
    }
</script>

我的控制器

public ActionResult GridSelectionCommand(string id)
{
     //Here i do what ever i need to do
}

答案 4 :(得分:0)

道路就在这里。

如果要指定

  

dataType:'json'

然后使用,

$('#ddlIssueType').change(function () {


            var dataResponse = { itemTypeId: $('#ddlItemType').val(), transactionType: this.value };

            $.ajax({
                type: 'POST',
                url: '@Url.Action("StoreLocationList", "../InventoryDailyTransaction")',
                data: { 'itemTypeId': $('#ddlItemType').val(), 'transactionType': this.value },
                dataType: 'json',
                cache: false,
                success: function (data) {
                    $('#ddlStoreLocation').get(0).options.length = 0;
                    $('#ddlStoreLocation').get(0).options[0] = new Option('--Select--', '');

                    $.map(data, function (item) {
                        $('#ddlStoreLocation').get(0).options[$('#ddlStoreLocation').get(0).options.length] = new Option(item.Display, item.Value);
                    });
                },
                error: function () {
                    alert("Connection Failed. Please Try Again");
                }
            });

如果您未指定

  

dataType:'json'

然后使用

$('#ddlItemType').change(function () {

        $.ajax({
            type: 'POST',
            url: '@Url.Action("IssueTypeList", "SalesDept")',
            data: { itemTypeId: this.value },
            cache: false,
            success: function (data) {
                $('#ddlIssueType').get(0).options.length = 0;
                $('#ddlIssueType').get(0).options[0] = new Option('--Select--', '');

                $.map(data, function (item) {
                    $('#ddlIssueType').get(0).options[$('#ddlIssueType').get(0).options.length] = new Option(item.Display, item.Value);
                });
            },
            error: function () {
                alert("Connection Failed. Please Try Again");
            }
        });

如果要指定

  

dataType:'json'和contentType:'application / json;字符集= UTF-8'

然后使用

$.ajax({
            type: 'POST',
            url: '@Url.Action("LoadAvailableSerialForItem", "../InventoryDailyTransaction")',
            data: "{'itemCode':'" + itemCode + "','storeLocation':'" + storeLocation + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            cache: false,
            success: function (data) {

                $('#ddlAvailAbleItemSerials').get(0).options.length = 0;
                $('#ddlAvailAbleItemSerials').get(0).options[0] = new Option('--Select--', '');

                $.map(data, function (item) {
                    $('#ddlAvailAbleItemSerials').get(0).options[$('#ddlAvailAbleItemSerials').get(0).options.length] = new Option(item.Display, item.Value);
                });
            },
            error: function () {
                alert("Connection Failed. Please Try Again.");
            }
        });

答案 5 :(得分:0)

如果仍然无法让它发挥作用,请尝试检查您正在呼叫$.post的网页网址

在我的情况下,我从localhost:61965/Example调用此方法,我的代码是:

$.post('Api/Example/New', { jsonData: jsonData });

Firefox已将此请求发送至localhost:61965/Example /Api/Example/New ,这就是我的请求无效的原因。