Asp.net MVC,通过onclickJS事件从客户端调用C#方法

Asp.net MVC, calling C# method from client-side by onclick JS event

本文关键字:客户端 调用 方法 事件 onclickJS net MVC 通过 Asp      更新时间:2024-03-26

我得到了"MultiLanguageProvider",它是普通的C#类,而不是控制器或模型。这个想法是,当用户单击<a href="">Change language</a>时,它必须在MultiLanguageProvider实例上回调服务器端void ChangedLanguage()。这根本不起作用:

        <a href="" onclick="@{ MultiLanguageProvider.Instance.SwapLanguage(); }">@MultiLanguageProvider.Instance.SelectAppropriate("на русском", "in english")</a>

-'导致@{ }中的所有代码在页面加载时立即执行。我没有被告知AJAX,所以也许你的某个人可以告诉我做这项简单工作的正确方向?

我不明白您试图在锚标记单击时调用哪一个。但是,如果我理解你的问题的本质,你正试图调用一些服务器端方法来更改语言,在这里我假设你想保存在用户界面(UI)上进行的语言选择。如果这就是你想要的,在客户端,你可以按照Stephen Muecke的建议进行更改。在服务器端,您需要在控制器上添加一个[HTTPOST]操作方法,类似于:

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;
    });
}

当然,您需要处理客户端和服务器端的错误情况。

如果您不想保存任何内容,只想根据用户选择的语言将用户重定向到某个url,那么您的onclick事件处理程序类似于:

$('#swaplanguage).on('click', function(event) {
    urlToRedirect = 'url_to_redirect' + '/' + $('#languageDropDownId').val();
    window.location = urlToRedirect;
}

最后,你的锚标签是:

<a id="swaplanguage">Change Language</a>

希望能有所帮助。