【问题标题】:First time AJAX, examples not working for me第一次使用 AJAX,示例不适合我
【发布时间】:2012-06-16 08:39:06
【问题描述】:

我试图使用 HTML 按钮调用 c# 类方法。 在另一个主题中,人们建议我使用 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);
    }

【问题讨论】:

  • 什么是 lang 在这种情况下?你应该做 var lang = "en";
  • 如果您想要弹出消息,请改用 JavaScript。回调函数中的alert('test')
  • @DeadManWalking System.Windows.Forms 用于 Windows 窗体,而不是 asp.net 应用程序。从您的控制器操作中,您可能希望向 AJAX 调用返回一些值。
  • @DeadManWalking 在通过 AJAX 调用方法时,最好返回一些东西给它。否则你怎么知道它起作用了?
  • @DeadManWalking 如果您不断更改示例代码,则很难遵循。如果您使用更改的代码添加更新而不是替换它,它会更容易。

标签: c# jquery html ajax


【解决方案1】:

将以下内容添加到 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 是在浏览器和服务器之间发送数据的首选方式。

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

【讨论】:

  • 感谢您的反应,但是仍然没有运气:(回调函数似乎永远不会被执行
  • 您的控制台是否有任何错误?您可以使用 Fiddler (fiddler2.com/fiddler2) 查看发送了哪些请求。这是调试 Web 应用程序的好工具。
  • 是的,我有提琴手,它会在 localhost:57688/@Url.Action(%22setLang%22,%22Home%22)/?lang=en 上引发 500 错误
  • 您使用的是 ASP.NET WebForms 还是 MVC?使用 MVC 时,该 url 应扩展为 localhost:57688/home/setlang?lang=en
  • Fiddler 向您显示包含“Url.Action”的 URL。通常,MVC 应该在渲染页面时执行此代码。您在页面的源视图中看到了什么?
【解决方案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>

【讨论】:

  • @jrummell:哦,是的!我错过了!。感谢您指出。现已更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
相关资源
最近更新 更多