1

我试图使用 HTML 按钮调用 ac# 类方法。在另一个主题中,人们建议我使用 AJAX。我查看了不同的教程并尝试实现它,但到目前为止它对我不起作用。

现在我只想让按钮给我一个弹出窗口(只是让我知道正在调用该方法)我要调用的方法是来自 HomeController 类的 setLang(string lang)

这就是我的 onclick 事件

<input type="submit" onclick="setLanguage();" value="submit">

这是脚本部分,我在同一页面中有这个

<script type="text/javascript">
function setLanguage() {
var lang = "en";
$.post('@Url.Action("setLang","HomeController")/' + lang,function(){
//i'm not expecting a result to process
});
}
</script>

但是当我点击我的按钮时没有任何反应。

我在这里错过了什么吗?

编辑:函数被调用,但回调不是

更新:仍然无法正常工作,这是我当前的代码(根据要求)

按钮 (index.aspx)

<input type="button" onclick="setLanguage();" value="submit">

函数(index.aspx)

<script type="text/javascript">
function setLanguage() { 
alert("this message shows");       
    $.post('Url.Action("setLang","Home")/?lang=' + lang,
        function (data) {
            alert("this message does not");
        });
 }
</script>

在 HomeController.cs

   public JsonResult setLang(string lang)
    {       
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
        .....//a lot more code, until it reaches
        return Json("Language: " + lang);
    }
4

2 回答 2

2

将以下内容添加到 HomeController 的 Index 视图中:

<input type="button" onclick="setLanguage();" value="submit">

<script type="text/javascript">
    function setLanguage() {
        var lang = "en";
        $.post('@Url.Action("setLang","Home")/?lang=' + lang,
            function (data) {
                alert(data);
        });
    }
</script>

与您的代码相比,我更改了一些内容:

  • 输入类型 = 按钮
  • 控制器名称应该是“Home”,而不是“HomeController”。ASP.NET MVC 默认添加“控制器”部分
  • 您的成功函数采用数据参数并在客户端计算机上执行 javascript 警报。
  • 因为您没有为此特定方法设置路由,所以我已将 lang 参数更改为您的查询字符串的一部分。

然后在服务器上将以下操作方法添加到您的 HomeController

public JsonResult setLang(string lang)
{
    return Json("Language: " + lang);
}

该函数采用您的 lang 参数,然后返回一个仅包含简单字符串值的 JsonResult。Json 是在浏览器和服务器之间发送数据的首选方式。

您可以扩展此示例并将更复杂的数据返回到您的浏览器。

于 2012-06-13T12:17:36.473 回答
2

由于您通过POST Http 类型调用 action 方法,因此请确保您的 Action 方法也准备好响应 HTTPPostType 请求。您可能需要将HttpPost注释添加到您的操作方法中。

[HttpPost]
public ActionResult setLang(string id)
{
  return Content("MVC is awesome");
}

要处理来自操作方法的响应,请使用带有参数的回调方法。在下面的示例中,您将从变量中的操作方法获得响应data

<input type="submit" value="submit">
<script type="text/javascript">
 $(function(){

   $("form").submit(function(e){

    e.preventDefault();  // preventing the default form submit behaviour
       var lang="en"
       $.post("@Url.Action("setLang","Home")/" + lang,function(data){
           alert(data);
       });

   });

 });
</script>
于 2012-06-13T12:22:51.557 回答