Отправка строковых данных в MVC-контроллер с использованием jQuery $.ajax() и $.post()
Там должно быть что-то, что мне не хватает. Я попытался использовать $.ajax() и $.post(), чтобы отправить строку в мой MVC-контроллер ASP.NET, и пока контроллер достигнут, строка будет равна null, когда она туда попадет. Итак, вот почтовый метод, который я пробовал:
$.post("/Journal/SaveEntry", JSONstring);
И вот метод ajax, который я пробовал:
$.ajax({
url: "/Journal/SaveEntry",
type: "POST",
data: JSONstring
});
Вот мой контроллер:
public void SaveEntry(string data)
{
string somethingElse = data;
}
Для фона я сериализовал объект JSON с помощью JSON.stringify(), и это было успешным. Я пытаюсь отправить его на мой контроллер для Deserialize(). Но, как я уже сказал, строка возвращается как null каждый раз. Любые идеи?
Большое спасибо.
UPDATE:. Мне ответили, что моя проблема в том, что я не использовал пару ключ/значение в качестве параметра для $.post(). Поэтому я попробовал это, но строка все еще попала в контроллер как null:
$.post("/Journal/SaveEntry", { "jsonData": JSONstring });
Ответы
Ответ 1
Ответил. У меня не было правильных имен переменных после моего первого обновления. Я изменил имя переменной в контроллере на jsonData, поэтому мой новый заголовок контроллера выглядит следующим образом:
public void SaveEntry(string jsonData)
и мое действие post в JS выглядит так:
$.post("/Journal/SaveEntry", { jsonData: JSONstring });
JSONstring - это "стробированный" (или "сериализованный" ) объект JSON, который я сериализую, используя плагин JAON
Ответ 2
Итоговый ответ:
Кажется, что имена переменных не выстраивались в его должности, как я предложил в комментарии после сортировки проблем форматирования данных (предполагая, что это тоже проблема.
Собственно, убедитесь, что вы используете правое ключевое имя, что ваш серверный кода, а также Пример Олека - т.е. если код youre ищет переменные данные, то вы необходимо использовать данные в качестве ключа. - prodigitalson 6 часов назад
@prodigitalson, это сработало. имена переменных не выстраивались. Будет вы отправляете второй ответ, чтобы я мог принять это? Благодарю. - Мега Мэтт 6 часов назад
Поэтому ему нужно было использовать пару ключ/значение и убедиться, что он захватывает правую переменную из запроса на стороне сервера.
аргумент данных должен быть парой значений ключа
$.post("/Journal/SaveEntry", {"JSONString": JSONstring});
Ответ 3
Кажется, DataType пропущен. Вы также можете установить contentType на всякий случай. Вы попробуете эту версию?
$.ajax({
url: '/Journal/SaveEntry',
type: 'POST',
data: JSONstring,
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
Приветствия.
Ответ 4
Спасибо за ответ, это решит мой кошмар.
Моя сетка
..
.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
}
Ответ 5
Путь здесь.
Если вы хотите указать
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.");
}
});
Ответ 6
Если вы все еще не можете заставить его работать, попробуйте проверить URL страницы, с которой вы вызываете $.post
.
В моем случае я вызывал этот метод из localhost:61965/Example
, а мой код:
$.post('Api/Example/New', { jsonData: jsonData });
Firefox отправил этот запрос на localhost:61965/Example
/Api/Example/New
, поэтому мой запрос не работал.