我得到了“MultiLanguageProvider”,它是普通的C#类,而不是Controller或Model。这个想法是当用户点击<a href="">Change language</a>
时 - 它必须在void ChangedLanguage()
实例上回调服务器端MultiLanguageProvider
。这根本不起作用:
<a href="" onclick="@{ MultiLanguageProvider.Instance.SwapLanguage(); }">@MultiLanguageProvider.Instance.SelectAppropriate("на русском", "in english")</a>
- '导致@{ }
内的所有代码在页面加载时立即执行。我没有被告知AJAX,所以也许你的某个人可以告诉我这个工作的正确方向吗?
答案 0 :(得分:0)
我不明白你试图在锚标签点击时调用哪一个。但是,如果我理解你的问题的本质,你试图调用一些服务器端方法来改变语言,在这里我假设你想保存在用户界面(UI)上做出的语言选择。如果这是您正在寻找的,在客户端,您执行Stephen Muecke建议的更改。在服务器端,您需要在控制器上添加一个[HTTPPOST]操作方法,如:
public ActionResult SwapLanguage(LanguageViewModel languageViewModel)
{
//do the save action => like saving to database
return Json(new { data = {urlToRedirt: "/someUrl_GeneratedVia_UrlHelper"},
status = "success",
message = "Language Changed Successfully" }, JsonRequestBehavior.AllowGet);
}
}
在客户端:
$('#swaplanguage).on('click', function(event) {
event.preventDefault();
$.post( '@Url.Action("SwapLanguage")', function( data ) {
// Handle the server side response here.
// Like if you want to redirect, use something like:
// window.location = data.urlToRedirt;
});
}
当然,您需要在客户端和服务器端处理错误情况。
如果您不想保存任何内容,并且只是想根据用户选择的语言将用户重定向到某个网址,那么您的onclick事件处理程序就像:
$('#swaplanguage).on('click', function(event) {
urlToRedirect = 'url_to_redirect' + '/' + $('#languageDropDownId').val();
window.location = urlToRedirect;
}
最后,你的锚标签是:
<a id="swaplanguage">Change Language</a>
希望有所帮助。