Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用jQuery$.ajax()和$.post()将字符串数据发送到MVC控制器_Asp.net Mvc_Jquery_Controller - Fatal编程技术网

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

Asp.net mvc 使用jQuery$.ajax()和$.post()将字符串数据发送到MVC控制器,asp.net-mvc,jquery,controller,Asp.net Mvc,Jquery,Controller,一定有什么我错过了。我尝试使用$.ajax()和$.post()向我的ASP.NET MVC控制器发送一个字符串,当到达控制器时,该字符串为空。下面是我尝试过的post方法: $.post("/Journal/SaveEntry", JSONstring); $.ajax({ url: "/Journal/SaveEntry", type: "POST", data: JSONstring }); 下面是我尝试过的ajax方法: $.post("/Journal/Sa

一定有什么我错过了。我尝试使用$.ajax()和$.post()向我的ASP.NET MVC控制器发送一个字符串,当到达控制器时,该字符串为空。下面是我尝试过的post方法:

$.post("/Journal/SaveEntry", JSONstring);
$.ajax({
    url: "/Journal/SaveEntry",
    type: "POST",
    data: JSONstring
});
下面是我尝试过的ajax方法:

$.post("/Journal/SaveEntry", JSONstring);
$.ajax({
    url: "/Journal/SaveEntry",
    type: "POST",
    data: JSONstring
});
这是我的控制器:

public void SaveEntry(string data)
{
    string somethingElse = data;
}
在后台,我使用JSON.stringify()序列化了一个JSON对象,这是成功的。我正试图将其发送到我的控制器以反序列化()。但是正如我所说的,字符串每次都是以null的形式到达的。有什么想法吗

非常感谢

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

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

最终答案:

在整理了数据格式问题(假设这也是一个问题)后,我在一篇评论中建议,他的帖子中似乎没有列出变量名


事实上,确保你正在使用 您的服务器端所使用的右键名称 代码正在查找以及根据 Olek的例子-即,如果你的代码是 寻找变量数据,然后 需要使用数据作为密钥 神童6小时前


@神童,成功了 变量名没有对齐。威尔 你发布第二个答案,这样我就可以 接受它?谢谢。-6小时 以前

因此,他需要使用一个键/值对,并确保从服务器端的请求中获取正确的变量


数据参数必须是键值对

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

似乎缺少数据类型。您也可以设置contentType以防万一。是否尝试此版本

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

干杯。

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

public void SaveEntry(string jsonData)
$.post("/Journal/SaveEntry", { jsonData: JSONstring });
我在JS中发布的操作如下所示:

public void SaveEntry(string jsonData)
$.post("/Journal/SaveEntry", { jsonData: JSONstring });
JSONstring是一个“stringized”(或“serialized”)JSON对象,我使用JSON.org上提供的

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

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

谢谢你的回答,这解决了我的噩梦

我的网格

..
.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>
路在这里

如果您想指定

数据类型:“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");
                }
            });
如果您没有指定

数据类型:“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");
            }
        });
如果您想指定

数据类型:“json”和内容类型:“application/json;charset=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.");
            }
        });

如果您仍然无法使其工作,请尝试检查您正在调用
$的页面URL

在我的例子中,我从
localhost:61965/Example
调用这个方法,我的代码是:

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

Firefox将此请求发送到
localhost:61965/Example
/Api/Example/New
,这就是我的请求不起作用的原因。

@prodigitalson,我同意这是一个选项,但的文档中说它将接受键/值对(Map)或者一个字符串。所以我有点困惑…@Mega Matt:如果你使用字符串,我会假设它必须是标准的查询字符串格式,即JSONString=mySerializedDataStruct&var2=myothervar。为了在服务器端检索它,变量hase必须有一个名称。@prodigitalson,尝试使用上面回答的方法,但没有成功。请参阅我的编辑在上面。是的,我看到了,并直接回答了你的问题…你能用firebug查看请求中发送的内容吗?(或者任何其他方法,在服务器端过滤或其他任何操作之前查看实际发送的http请求。)@Mega Matt,请看本页底部:它有示例屏幕截图和文本解释,我希望这会有所帮助。@Oleksandr Bernatskyi,但当我发送字符串时,数据类型应该是“json”吗?这不是一个json对象,只是一个字符串……哦,我明白了。@prodigitalson说的是对的——每个变量都应该有一个名称。也许这是工作不正常?$.post(“/Journal/SaveEntry”,{“data”:JSONstring});事实上,请确保您使用的是服务器端代码正在查找的正确的键名,正如Olek的示例所示-即。如果您的代码正在查找变量数据,则您需要使用数据作为键。@prodigitalson,成功了。变量名没有排列。您是否可以发布第二个答案,以便我可以接受?谢谢。@Mega Matt我编辑了我的原始回复,以获得最终答案-虽然您不清楚-发送数据的最终格式是什么:{var:value}或者“var=value”或其他格式?作为对更新的响应…您可以firebug它吗?在firebug控制台中,什么实际上作为请求发送到服务器?简洁的解决方案;)