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

时间:2016-04-09 23:23:43

标签: javascript c# jquery ajax asp.net-mvc

我得到了“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,所以也许你的某个人可以告诉我这个工作的正确方向吗?

1 个答案:

答案 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>

希望有所帮助。