Kendo Control вызывает метод действия контроллера только с главной страницы. Это не вызывает это с другой страницы - PullRequest
0 голосов
/ 16 мая 2019

У меня есть index.cshtml представление, которое использует общий макет:

@{
    Layout = "~/Views/Shared/_LoginLayout.cshtml";
}

Этот index.cshtml вид отображается, когда пользователь открывает страницу входа в приложение. Работает с контроллером входа

Этот макет создает частичное представление, которое определяет Kendo.DropDownList:

@Html.Partial("_CultureSelector")

Это _CultureSelector представление с выпадающим списком:

<script>
    function onCultureChange(e) {

        ChangeCulture(e, this);
    }

    function onDataBound(e) {
        var combo = $("#culture").data("kendoDropDownList");

        $(combo.dataItems()).each(function () {
            if (this.IsDefault) {
                e.sender.value(this.Value);
            }
        });
    }
</script>

<label for="culture">Choose culture:</label>
@(Html.Kendo().DropDownList()
        .Name("culture")
        .DataValueField("Value")
        .DataTextField("DisplayText")
        .DataSource(dataSource =>
        {
            dataSource.Read(read =>
            {
                read.Action("PopulateCultures", "CultureSelector");

            }).Events(e => e.Error("CheckError"));
        })
        .Events(events =>
        {
            events.Select("onCultureChange").DataBound("onDataBound");
        })
)

У меня есть контроллер с именем «CultureSelector» с методом «ChangeCulture»:

public JsonResult ChangeCulture(string selectedCulture)
{
    Session["SiteUICulture"] = selectedCulture;
    Session["hasCultureChanged"] = true;
    GlobalCulture.SetCultureCookie(selectedCulture);
    Session["CultureDropDownSelected"] = true;

    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}

Когда я меняю значение в раскрывающемся списке, этот метод вызывается, но ТОЛЬКО на странице входа в систему.

Это Ajax-вызов метода "ChangeCulture":

function ChangeCulture(e, cultureDropDown) {

    var loginUrl = document.location.origin + '/Login';
    var returnUrl = document.location.pathname + document.location.search;

    if (e.item) {
        var selectedCulture = cultureDropDown.dataItem(e.item);
        $.ajax(
            {
                url: "CultureSelector/ChangeCulture",
                type: "GET",
                contentType: "application/json; charset=utf-8",
                datatype: "json",
                data: { "selectedCulture": selectedCulture.Value },
                success: function (response) {
                    if (response.success) {
                        alert("test");
                        window.location.href = returnUrl;
                    }

                }
            }
        )
    }
}

Когда я меняю раскрывающийся список на странице входа, строка «test» печатается на Ajax success, а на странице «Forgot Password» не печатается.

Страница входа имеет ссылку «Забыли пароль», и при ее нажатии открывается страница «Забыли пароль».

Эта страница использует тот же макет:

@{
    Layout = "~/Views/Shared/_LoginLayout.cshtml";
}

Итак, тот же выпадающий список генерируется. PopulateCultures метод вызывается.

Но при изменении значения в раскрывающемся списке метод CultureChange не вызывается.

Что мне здесь не хватает?

...