Подтвердить что ты не робот

Предоставление простого ASP.NET MVC PartialView с использованием JQuery Ajax Post call

В моем MVC-контроллере есть следующий код:

[HttpPost]
public  PartialViewResult GetPartialDiv(int id /* drop down value */)
{
    PartyInvites.Models.GuestResponse guestResponse = new PartyInvites.Models.GuestResponse();
    guestResponse.Name = "this was generated from this ddl id:";

    return PartialView("MyPartialView", guestResponse);
}

Затем это в моем javascript в верхней части моего представления:

$(document).ready(function () {

$(".SelectedCustomer").change( function (event) {
    $.ajax({
        url: "@Url.Action("GetPartialDiv/")" + $(this).val(),
        data: { id : $(this).val() /* add other additional parameters */ },
        cache: false,
        type: "POST",
        dataType: "html",
        success: function (data, textStatus, XMLHttpRequest) {
            SetData(data);
        }
    });

});

    function SetData(data)
    {
        $("#divPartialView").html( data ); // HTML DOM replace
    }
});

Затем, наконец, мой html:

 <div id="divPartialView">

    @Html.Partial("~/Views/MyPartialView.cshtml", Model)

</div>

По существу, когда у моего dropdown-тега (который есть класс, называемый SelectedCustomer), он меняет, он должен запустить пост-вызов. Что он делает, и я могу отлаживать свой контроллер, и он даже возвращается успешно, возвращает PartialViewResult, но тогда функция SetData() не может быть вызвана, и вместо этого я получаю внутреннюю ошибку сервера 500, как показано ниже на консоли Google Chromes:

POST http://localhost: 45108/Главная/GetPartialDiv/1 500 (Внутренний сервер Ошибка) jquery-1.9.1.min.js: 5 b.ajaxTransport.send jquery-1.9.1.min.js: 5 b.extend.ajax jquery-1.9.1.min.js: 5 (анонимный функция) 5:25 b.event.dispatch jquery-1.9.1.min.js: 3 b.event.add.v.handle jquery-1.9.1.min.js: 3

Любые идеи, что я делаю неправильно? Я убил этого до смерти!

4b9b3361

Ответ 1

эта строка неверна: url: "@Url.Action("GetPartialDiv/")" + $(this).val(),

Атрибут

$.ajax data уже включен в значение маршрута. Поэтому просто определите url в атрибуте url. напишите значение маршрута в атрибуте data.

$(".SelectedCustomer").change( function (event) {
    $.ajax({
        url: '@Url.Action("GetPartialDiv", "Home")',
        data: { id : $(this).val() /* add other additional parameters */ },
        cache: false,
        type: "POST",
        dataType: "html",
        success: function (data, textStatus, XMLHttpRequest) {
            SetData(data);
        }
    });
});