codegeekalpha Ответов: 0

О событии изменения в выпадающем списке ASP.NET


хочу, чтобы отобразить сниженной цене, используя событие onChange jQuery в мой asp.net в MVC

но получаю 500 внутренних ошибок сервера.
GET http://localhost:9421/Products/GetDis?discount=1&productName=apple 500 (Internal Server Error)


Просмотр кода-это

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductPrice, new { @id = "prisValue" })
        </td>
       
            <td>

               @Html.DropDownList("Status", new List<SelectListItem>
                 {
                    new SelectListItem{ Text="Student Discount", Value = "1" },
                    new SelectListItem{ Text="Loyalty Discount", Value = "0" }
                 }, "Please select discount", new { onchange = "ChangeDis(this,'" + item.ProductName + "')" })
                
            </td>

        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

</table>
@section scripts{
    <script>
        
        function ChangeDis(o, proName, targetPrice) {
            // Get the triggering element
           // var element = event.srcElement;
            var targetPrice= $("#prisValue").val();
            //var targetPrice = $(element).closest('td').prev('td');
            $.ajax({
                url: '@Url.Action("GetDis")',
                data: { "discount": o.value, "productName": proName , "tPrice":targetPrice},
                success: function (data) {
                    $(targetPrice).text(data);
                }
            });
        }
    </script>
}


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

public ActionResult Index()
       {
           Customers customer = new Customers();

           return View(db.Products.ToList());
       }
       public JsonResult GetDis(string discount, string productName, decimal tPrice)
       {
           Customers customer = new Customers();

           var products = db.Products.ToList();

           decimal price;

           if (discount == "1")
           {

              customer.SetDiscountStrategy(new LoyalStudentDiscount());
               price = customer.ApplyDiscount(tPrice);
               //lblFinalPrice.Text = price.ToString("C");
           }
           if (discount == "0")
           {
               customer.SetDiscountStrategy(new LoyaltyDiscount());
               price = customer.ApplyDiscount(tPrice);
           }
           return Json(JsonRequestBehavior.AllowGet);
       }


Как получить дисконтированную цену на вид

F-ES Sitecore

передается ли tPrice в действие? В любом случае поставьте точку останова в своем действии и следуйте за ней, чтобы увидеть, что происходит, поскольку код внутри генерирует исключение. Вы можете увидеть исключение, если также используете инструменты разработки браузера.

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

Ваш метод также не должен быть GET, он должен быть, по крайней мере, POST, вы также не возвращаете никаких данных, которые будут потребляться вызывающим jQuery, похоже, что код ожидает, что вы отправите обновленную цену, но это не так.

j snooze

Согласитесь с F-ES Sitecore. Вы не передаете целевую цену своему методу JavaScript ChangeDis в событии onchange вашего представления. Он будет нулевым, если вы ничего не передадите.

sachin.vishwa90

Есть несколько шагов, которые вы должны проверить.
1) Поместите отладчик в свой javascript-код, где вы делаете вызов ajax, проверьте, что вы получаете соответствующие данные в своем скрипте.
2) Поместите отладчик в свой метод действия и проверьте, что вы получаете соответствующие данные в своем методе действия.
3) убедитесь, что вы возвращаете объект, который необходим в вашем представлении
ex return Json(responseObject, JsonRequestBehavior.AllowGet); или JsonResult(responseObject,JsonRequestBehavior.AllowGet);
таким образом, ключ-это отладка вашего кода, и вы получите правильный ответ, почему он дает вам 500 ошибок.

0 Ответов