Не могу отобразить частичное представление - контроллер не попал - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть выпадающий список, в котором я хочу сделать частичное представление в зависимости от того, какой элемент выбран.Для этого я использую jquery и MVC 5. После установки точек останова в моем контроллере мой вызов Url.Action (), кажется, не достигает этого при изменении выпадающего списка.Я не уверен, что понимаю, как правильно использовать значения маршрута, чтобы это могло быть.Вот что у меня есть:

Соответствующая часть начального вида

<div>
        @if (role == "admin")
         {
            <p>Choose state to view:</p>
            <select id="stateList">
                <option value="AL">Alabama</option>
                <option value="AR">Arkansas</option>
                <option value="DE">Delaware</option>
                <option value="FL">Florida</option>
                <option value="GA">Georgia</option>
                <option value="IA">Iowa</option>
                <option value="IL">Illinois</option>
                <option value="IN">Indiana</option>
                <option value="KS">Kansas</option>
                <option value="KY">Kentucky</option>
                <option value="LA">Louisiana</option>
                <option value="MD">Maryland</option>
                <option value="MS">Mississippi</option>
                <option value="MO">Missouri</option>
                <option value="NC">North Carolina</option>
                <option value="NE">Nebraska</option>
                <option value="NJ">New Jersey</option>
                <option value="OH">Ohio</option>
                <option value="OK">Oklahoma</option>
                <option value="SC">South Carolina</option>
                <option value="TN">Tennessee</option>
                <option value="TX">Texas</option>
                <option value="VA">Virginia</option>
                <option value="WV">West Virginia</option>
            </select>
            <div id="#partialPlaceHolder">

            </div>
        }

JQuery для доступа к контроллеру

//Load partial view when an admin changes the state selection
    $('#stateList').change(function () {
        var selection = $(this).val();
        var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;
        //url ends up looking like this: /Visualizations/StateData?StateID=IA  (or some other state abbreviation)
        $("#partialPlaceHolder").load(url, function () {
                console.log("it worked");
         });
      });

Модель

public class VisualizationModels
{
    public String StateID { get; set; }
}

Контроллер для генерации частичного просмотра

public ActionResult StateData(string stateID)
    {
        VisualizationModels vm = new VisualizationModels();
        vm.StateID = stateID;
        return PartialView("_SpecificStateData", vm);
    }

ОБНОВЛЕНИЕ

Как ни странно, если я использую $.get вместо @Url.Action, я действительно выполню действие контроллера, просто по какой-то причине он сейчас не будет отображать частичное представление ...

//Load partial view when an admin changes the state selection
    $('#stateList').change(function () {
        var selection = $(this).val();
        var url = '/Visualizations/StateData?StateID=' + selection;
        $.get(url, function (data) {
            $('#partialPlaceHolder').html(data);
        });

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я понял это ... это самая глупая, самая неприятная маленькая проблема.В моем главном окне (вверху моего исходного сообщения) я набрал id моего div неправильно ...

Неправильно:

<div id="#partialPlaceHolder"></div>

Вправо:

<div id="partialPlaceHolder"></div>

Теперь все работает как положено.Финал JS выглядит так:

//Load partial view when an admin changes the state selection
    $('#stateList').change(function () {
        var selection = $(this).val();
        var url = '@Url.Action("StateData", "Visualizations", new { StateID = "_state" })'.replace("_state", selection);
        $("#partialPlaceHolder").load(url, function () {
                console.log("it worked");
        });
    });
0 голосов
/ 27 сентября 2018

Не можете ли вы использовать что-то подобное

 var url = '@Url.Action("StateData", "Visualizations", new { StateID = selection})'

вместо

 var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;

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

...