【问题标题】:How do I stop a button event from posting in ASP.NET MVC?如何阻止按钮事件在 ASP.NET MVC 中发布?
【发布时间】:2010-12-27 07:20:06
【问题描述】:

我有一个标准视图和一些没有runat=server 的标准input 标签:

<button id="submit">submit</button>
<button id="clear">clear</button>

按其中一个会导致页面提交。相反,我希望他们什么都不做,因为我正在使用 JQuery 处理 click 事件。我该怎么做?

编辑

这是我的 jquery 代码

$('#submit').bind('click', submit_click);

function submit_click() {
    alert('clicked submit');
}

【问题讨论】:

  • 回发?运行服务器?你确定这是 MVC 吗?
  • 是 - 100%,我进入一个控制器,我渲染我的视图等。它是 mvc 100%
  • 如果您不想要提交按钮。为什么不用一个简单的输入按钮 &lt;input type="button" /&gt; 替换它们。
  • @Mehdi:您应该将此作为答案发布:) 解决了我的问题
  • @keith,谢谢。但我认为有些事情我没有意识到。 ;)

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


【解决方案1】:

type 设置为button

这将阻止表单提交。
无需额外的 javascript 函数。
注意:当此属性设置时,它默认为submit

我假设您的 button 控件位于 form 标记或 Html.BeginForm() 代码块内。
下面是一些例子:

<button onclick="alert('You Clicked Implicit Submit.')">Implicit Submit</button>//Post Back Form.
<button onclick="alert('You Clicked Submit.')" type="submit">Submit</button>//Post Back Form.
<button onclick="alert('You Clicked Button.')" type="button">Button</button>//Stay on Client Page.

对于简单的重定向(不将表单发布回其默认操作),您也可以这样做:

<button onclick="location.href='@Url.Action("Action", "Controller")'" type="button">Redirect</button>

特别感谢在这里找到的答案:https://stackoverflow.com/a/17452739/555798

【讨论】:

  • 只有在没有人通过任何浏览器中的开发人员工具将类型更改回“提交”时,才能将类型更改为“按钮”。
  • @mchar 使用浏览器开发工具,您还可以编辑 HTML 以添加提交的新按钮,以及在页面上编辑/添加 Javascript 以及其他一些超出此范围的内容问题,所以我不明白你的意思。上面的答案是否不足以回答问题?如果存在安全问题,请考虑研究如何更好地保护您的网站(例如 stackoverflow.com/a/33903828/555798)或发布有关它的新问题。
  • 我无意冒犯您的回答,的确,它涵盖了发布的问题,但是我的观点仍然有效,加上您在评论中提到的所有其他内容。有人可能不知道,认为表单不会像我一样提交,但实际上它会。
  • @mchar 这不是一个有效点。您基本上只是在说“我可以以调用公共端点的方式更改 HTML 和 JS,这是一个问题。”但这不是问题或考虑点,真的。
【解决方案2】:

在您的事件处理程序中,您需要执行以下操作:

$("button").click(function(event){
  event.preventDefault();
  // do something
});

取自:http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

更新 这应该适用于您的代码:

$('#submit').bind('click', submit_click);

function submit_click(event) {
    event.preventDefault();
    alert('clicked submit');
}

【讨论】:

  • 我住这个! -- 但是我如何将它应用到我的代码中呢?我将根据我的问题更新我的 jquery 代码
【解决方案3】:

将此添加到您的点击事件绑定中:

$('#submit').bind('click', submit_click);

function submit_click() {
    alert('clicked submit');
    return false;
}

返回 false 会停止按钮的常规行为,而只会执行您的代码。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多