У меня есть 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
не вызывается.
Что мне здесь не хватает?