【问题标题】:Call a method from button click in ASP.net, using controller使用控制器从 ASP.net 中的按钮单击调用方法
【发布时间】:2017-07-02 19:25:01
【问题描述】:

我是 ASP.net 的新手。我试图有一个简单的页面视图,它有一个按钮,当点击时,这将调用一个控制器中的方法,然后用 c# 做更多的代码和计算。

我阅读了帖子并尝试了此方法,但该方法似乎没有被调用,调试器永远不会在 Controler ClickButton1 方法中停止。

我的 VIEW 代码

<div>
    <input id="Button1" type="button" value="Button 1" onclick="ClickButton1()" />
    <input id="Button2" type="button" value="Button 2" onclick="location.href='@Url.Action("Options", "Home")'" />
</div>

<div>
    <canvas id="mapCanvas" width="500" height="150" style="border:1px solid #000000;"></canvas>
</div>

<script>
function ClickButton1() {
    $.ajax({
        type: "POST",
        url: '@Url.Action("ClickButton1", "Definition")',
        async: true,
        success: function (msg) {
            ServiceSucceeded(msg);
        },
        error: function () {
            return "error";
        }
    });
}
</script>

我的控制器

namespace Traveler.Controllers
{
    public class DefinitionController : Controller
    {
        // GET: /<controller>/
        public IActionResult Index()
        {
            return View();
        }

        // Action click on Button 1
        public void ClickButton1()
        {
            Console.WriteLine("Button 1 Clicked");
        }
    }
}

【问题讨论】:

  • ClickButton1 是否标记为HttpPost?没有。但是您的 JavaScript 正在尝试向其发布。为什么你在做return "error"; 而不是收到错误消息?你有没有在网络流量上查看浏览器的开发者工具?
  • 嗨梅森,使用这篇文章中的代码为另一个似乎拥有相同 pb 的开发人员。我肯定错过了什么。 stackoverflow.com/questions/40928088/…
  • 我指出了你在我之前的评论中遗漏的内容。
  • 我错过了我必须将按钮标记为“httpPost”吗?不知道如何获取错误消息。
  • 我说的是 ClickButton1 和 HttpPost。这并不意味着你的按钮。这意味着你的行动方法。默认情况下,动作方法有 GET 请求,而不是 POST 请求。所以为了让它接收一个 GET 请求,你必须给ClickButton1 添加一个[HttpPost] 属性。如果您使用浏览器的开发人员工具查看网络流量,您可能会看到一条错误消息。我建议您学习如何执行此操作,因为您需要知道如何准确查看来自服务器的响应。

标签: c# asp.net ajax button controller


【解决方案1】:

将输入类型从提交改为按钮,避免多次提交。

将您的控制器方法标记为[HttpPost],然后重试。

如果您想知道为什么要这样做,请阅读以下内容:

[HttpPost] 属性告诉路由引擎将针对该操作方法的任何 POST 请求发送到一个方法而不是另一个方法。这是一种重载。

如果您想知道如何将 Method 标记为 [HttpPost] 方法,请查看:

[HttpPost]
public void ClickButton1()
{
    Console.WriteLine("Button 1 Clicked");
}

希望对你有帮助:)

【讨论】:

  • 谢谢,这似乎确实有效。调试器现在在控制台停止。无法在控制台中看到文本,但至少它达到了这一点。非常感谢!
  • @Frens 欢迎你,我的朋友,如果这个答案对你有帮助,请投票 :)
  • 我确实投了赞成票……我在论坛上太新了,但还没有计算在内。我检查了您的答案作为该问题的有效答案。干杯!
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2018-08-24
  • 2017-05-13
相关资源
最近更新 更多