Dhyanga Ответов: 1

Проблемы в вызове ajax в MVC


Привет,

Я новичок в MVC. У меня есть одна таблица продуктов, которая имеет ProductID, ProductName и ProductRate. У меня есть один выпадающий список, в котором есть все имена продуктов. Теперь я пытаюсь выбрать имя продукта, и после этого выбора он должен заполнить мое текстовое поле ProductRate. Код такой же, как и ниже, но он ничего не делает и никаких ошибок. Пожалуйста помочь.
<script type="text/javascript">
    function GetPrice(_this) {

        var x = document.getElementById("productID"), selectedValue = x.value;
        alert("_this" + _this.SelectedValue);
        var pid = selectedValue;
        alert(pid);
        var url = '@Url.Action("GetPrice","Sales")';
        alert(url);
              $.ajax({
                type:"POST",
                url: 'Sales/GetPrice',
                contentType: "application/json; charset=utf-8",
                data:  {pid: pid },
                cache:false,
                dataType: json,
                async: true,
                processData:false,
                success: function (data)
                {
                    alert("yay1");
                },
                failure: function (response) {
                    alert("Fail");
                }

        });

    };
</script>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
   <fieldset>
  <div class="editor-field">
<div class="editor-label">
            @Html.LabelFor(model => model.ProductId)
        </div>
  @Html.DropDownListFor(model => model.ProductId, new SelectList(ViewBag.ProductList, "ProductId", "ProductName" ), "Select Product", new { id = "productID", onchange="GetPrice(this);"})                       
            @Html.ValidationMessageFor(model => model.ProductId, "", new { @class = "text-danger" })
            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
        </div>


   <div class="editor-label">
            @Html.LabelFor(model => model.Rate)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Rate, new { id = "idRate"})
            @Html.ValidationMessageFor(model => model.Rate)
        </div>\
   </fieldset>
}



Вот мой контроллер "SalesController.cs" код:
[HttpPost]
      public JsonResult GetPrice(int ProductId)
      {
          return Json("");
      }


Что я уже пробовал:

Я попробовал этот код и поместил точку останова в часть контроллера только для того, чтобы посмотреть, выполняется ли мой ajax-вызов, но он, похоже, не работает . предупреждение часть выше AJAX-вызов работает, но не внутри AJAX-вызов. Пожалуйста помочь.

Bryian Tan

Я думаю, потому что имя параметра метода не совпадает. Попробуйте изменить данные: {пид: пид }, для сведения: {Кодтовара: пид }

F-ES Sitecore

Как было сказано выше, у вас есть проблема с несоответствием имен параметров. При использовании ajax полезно узнать, как можно отлаживать потенциальные проблемы

https://forums.asp.net/t/1982579.aspx?Using+the+browser+s+dev+tools+to+diagnose+ajax+problems+and+other+things+

Dhyanga

Спасибо Вам, Брайан, за оперативный ответ. Я попробовал использовать имя параметра как ProductId, но без изменений. :(

F-ES Sitecore

Попробуйте другой тип контента

contentType: "application/x-www-form-urlencoded; charset=UTF-8"

Dhyanga

Нет, это тоже не сработало.

Dhyanga

Еще раз спасибо за отладочную информацию ajax. Я вижу эту проблему и теперь могу ее исправить. Большое спасибо.

Kornfeld Eliyahu Peter

Поскольку вы находитесь в Razor, вы должны написать @onchange me think...

Kornfeld Eliyahu Peter

Я также сказал бы, что взгляд на результат HTML может помочь...

1 Ответов

Рейтинг:
2

Sunasara Imdadhusen

Я думаю, что проблема заключается в функции AJAX

$.ajax({
               type:"POST",
               url: 'Sales/GetPrice',
               contentType: "application/json; charset=utf-8",
               data:  {"ProductId": pid },
               dataType: "json",
               success: function (data)
               {
                   alert("Success!");
               },
               failure: function (response) {
                   alert("Fail!");
               }
       });

Я исправился
data:  {"ProductId": pid }
и
dataType: "json"

Если проблема все еще сохраняется, пожалуйста, проверьте консоль разработчика браузеров и Поделитесь подробностями.