0

У меня есть раскрывающийся список, в котором есть список идентификаторов. Клиент выберет один, и он будет отображать общую сумму на странице. Im создает вызов ajax, который будет обновлять общее количество, когда другой идентификатор извлекается из раскрывающегося списка.Ajax, передающий значение null контроллеру

$("#BrandId").on('focus', function() { 
    // Store the current value on focus and on change 
    previous = this.value; 
}).change(function() { 
    alert("Previous: " +previous); 
    sel = this.value; 
    alert("Selected: " +sel); 
    $.ajax({ 
     cache: false, 
     type: "get", 
     contentType: "application/json; charset=utf-8", 
     url: '@Url.Action("GetBrandCost", "Shocks")', 
     data: JSON.stringify({ idp: previous, id: sel }), 
     dataType: "json", 
     aysnc: false, 
     success: function (data1) { 
      alert(data1); 
       //ShockTotal = $("#ShockTotal").html(); 
       //ShockTotal = ShockTotal/1; 
       ////ShockTotal = ShockTotal - data1; 
       //$("#ShockTotal").html(data1); 

     } 
    }); 
}); 

Оповещения работают отлично, но Аякс разве прохождение этих идентификаторов в контроллер, контроллер просто принимает аннулирует.

public decimal GetBrandCost(string idp, string id) 
    { 
     decimal costp = 0; 
     decimal cost = 0; 
     if (id == "" || id == null || idp == "" || idp == null) 
     { 
      return 0; 
     } 
     ShockBrand brandp = db.ShockBrands.Find(idp); 
     costp = brandp.Cost; 
     ShockBrand brand = db.ShockBrands.Find(id); 
     cost = brand.Cost; 
     cost = cost - costp; 
     return cost; 
    } 

Поскольку они являются нулевыми, я нажимаю свое заявление if и просто возвращаю ноль внутри успеха. Большинство из того, что я читал, заключалось в том, чтобы добавить тип контента, но это, похоже, не помогло в моем случае, я уверен, что это что-то малое.

+0

почему не только: '' данных: {IDP: предыдущий, идентификатор: Сель} '' нет необходимости делать stringify –

+0

Когда я делаю что и переходите к моему контроллеру для отладки, он передает то же значение для idp и id, равное значению, назначенному для функции изменения – failsatheals

ответ

1

С консоли браузера это

$.ajax({ 
     cache: false, 
     type: "get", 
     contentType: "application/json; charset=utf-8", 
     url: 'http://google.com', 
     data: JSON.stringify({ idp: 1, id: 2 }), 
     dataType: "json", 
     aysnc: false, 
     success: function (data1) { 
      console.log(data1) 

     } 
    }); 

возвращает запрос на http://google.com/?{%22idp%22:1,%22id%22:2}&_=1440696352799, что неправильно

и без stringify

$.ajax({ 
     cache: false, 
     type: "get", 
     contentType: "application/json; charset=utf-8", 
     url: 'http://google.com', 
     data: { idp: 1, id: 2 }, 
     dataType: "json", 
     aysnc: false, 
     success: function (data1) { 
      console.log(data1) 

     } 
    }); 

возвращает http://google.com/?idp=1&id=2&_=1440696381239 (см вкладку Network)

Так не используйте JSON.stringify

Почему это сработает - ваше действие контроллера asp.net получает простые типизированные параметры (строка, числа и т. Д.), А jquery достаточно достаточно, чтобы определить, что собирается отправить, если бы это был объект внутри объекта, он отправит его как POST-данные для POST и строковое представление объекта для GET (у вас есть запрос GET, но для целей знания просто придерживайтесь двух типов данных, которые могут быть отправлены, params & данные) Так что, когда jquery настраивает URL-адрес , asp.net понимает соглашения и соответствует запросу к соответствующему действию

Но не верьте мне, проверьте это самостоятельно

хром DEV консольный ваш друг

+0

. Я думаю, теперь моя проблема в том, что вызов ajax проходит в том же значении для idp и id even хотя предупреждения показывают правильные значения. – failsatheals

+0

проверьте сетевую вкладку, если они действительно равны, тогда в вашем js-коде есть ошибка, обязательно введите один и тот же тип данных, строку в строку, int int и т. Д. –

+0

Мне потребовалось немного, чтобы понять, но я признал, что моя функция фокуса всегда будет обновлять мое предыдущее до нового выбранного значения. Таким образом, я взял значение предыдущего фокуса и поместил его в значение козла отпущения, когда я изменился, поэтому js не переписал бы предыдущий. – failsatheals

0

вы можете просто положить, как вар dataReq = {IDP: предыдущий, ID: Сель}; данные: dataReq

и нет необходимости использовать DATATYPE и CONTENTTYPE

Смежные вопросы