Asp.net mvc 使用jQuery$.ajax()和$.post()将字符串数据发送到MVC控制器
一定有什么我错过了。我尝试使用$.ajax()和$.post()向我的ASP.NET MVC控制器发送一个字符串,当到达控制器时,该字符串为空。下面是我尝试过的post方法: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
$.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控制台中,什么实际上作为请求发送到服务器?简洁的解决方案;)