在 ASP.NET 中禁用按钮点击时的回发

3

我希望在按钮的onClick事件中禁用postback。

我在网上进行了一些研究,大多数人都使用onClientClick并使用JavaScript。有没有办法在onClick中调用asp.net函数“btnCommit_Click”,而不是使用onclientclick并使用JavaScript?

如果不行,我该如何将asp.net函数与JavaScript结合起来?

<asp:Button ID="btnCommit" runat="server" Text="Save" TabIndex="5" 
    onclick="btnCommit_Click" />

更新 我有一个包含复选框的GridView,一旦用户进行更改并单击“保存”按钮,Post Back就会发生,我失去了对复选框所做的所有选择,我想在OnClcik事件中禁用postback会解决这个问题...


我对你想要做什么还有点模糊。你是想让一个按钮可以被点击并禁用多次点击,以确保只有一个单向传输,还是完全禁用该按钮的单向传输? - Joel Etherton
@JoelEtherton,我有一个GridView,里面装满了复选框,所以当你点击btnCommit时,如果它回传,我就会失去GridView和所有的复选框... - Nick Manojlovic
@David 先生,是的先生...我已经在问题中添加了一个更新部分。谢谢您的建议。 - Nick Manojlovic
@David:看一下Nick在我的回答中的评论。他正在尝试做一些AJAX操作。 - Kamyar
@Kamyar 我会尝试使用UpdatePanel,看看会发生什么。 - Nick Manojlovic
显示剩余8条评论
7个回答

3
我不是很确定您想要实现什么目标。但如果您想在一个asp.net按钮上同时使用js和服务器端,可以使用OnClientClickOnclick。如果您想取消 postback,请在OnClientClick js函数中返回 false。这样,服务器端的OnClick事件将永远不会被调用。否则,返回 true,将发生 postback。
更新:
根据评论和您的更新,如果您想持久化网格视图中复选框的状态,您必须避免在 Page_Load 事件中覆盖可能影响控件状态的任何内容。这简单地意味着您必须在 Page_Load 事件中检查 (IsPostback),如果为 true,则不应对您的 UI 元素执行任何操作,否则将失去它们的状态。

有没有办法让OnClick事件在不加载Page_Load的情况下立即触发?我有一个GridView,里面装满了复选框,当用户单击保存按钮时,它会带您进入onClick函数,然后将数据保存到数据库中...目前的情况是,如果用户单击保存按钮,Page_Load会再次加载,并且所有复选框所做的选择都会被清除... - Nick Manojlovic
1
我不确定,但我认为你可以使用ViewState来保留复选框的状态。但是如果启用了ViewState,那么很遗憾,这就是ASP.NET中的“邪恶”部分:页面生命周期。如果您不想要完整的PostBack,可以尝试使用ajax。 - Kamyar
然后,您应该仅在“if(!IsPostBack){}”语句内设置复选框(以及可能的GridView数据绑定等),以便复选框仅在第一次页面加载时设置,而不是在回发期间设置。请参见用法-> http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx - Simon
@Simon,这是我目前的设置方式。如果(!IsPostBack){如果(Request.QueryString [“ID”]!= null){tbName.Enabled = false; tbDescription.Enabled = false;} gridDataBind();} - Nick Manojlovic
@Simon,尽管我已经在(!IsPostBack)中设置了绑定,但一旦页面回收,我就看不到任何复选框。 - Nick Manojlovic

1

我已经按照那种方式设置了,但一旦进入按钮单击事件后仍然无法获取复选框。 - Nick Manojlovic
一旦您的点击事件触发,您需要再次调用databind函数来填充gridview。我通常会有一个名为SetPageData()的函数 - 在pageload检查中调用,然后在单击按钮并执行某些操作后再次调用。 - Simon
所以,如果我再次绑定GridView,它将丢失用户选择的数据。 - Nick Manojlovic
不需要再次绑定网格,因为ViewState默认为true。因此,它应该保留HTML。 - Pankaj
你需要将它存储在某个地方 - 数据库或会话中,并在后续加载它,如果你想要在 postback 期间保留用户选择,然后只有在真正需要时才提交到数据库。 - Simon
显示剩余5条评论

1
如果您不想在单击 ASP 按钮时加载页面或回发页面,您只需要将一个名为 CausesValidation 的属性更改为 false。

1
在我的大多数情况下,我所做的是将按钮转换为一个。
       <input type='button' /> 

这样我就可以通过JavaScript或jQuery访问它。但这可能不是您的情况。


0
我有一个包含复选框的GridView,一旦用户进行更改并单击“保存按钮”,就会发生Post Back并且我失去了所有所选复选框的选择。
你必须将Page_Load保持在Page.IsPostBack下,并将其值设置为false,像下面这样。
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        //Your code
    }
}

点击按钮后,这不会导致失去您选择的网格复选框。


你的 GridView EnableViewState 必须为 True


您的模板字段必须位于设计师页面中


这就是我已经拥有的方式。但是在按钮单击期间,当它重新加载Page_Load并进入按钮单击事件时,它会丢失gridview。 - Nick Manojlovic
在按钮点击事件中发生了什么?你绑定了空的网格数据吗? - Pankaj
在按钮单击时,它进入 Page_Load 检查是否为 post back,然后进入 btnCommit_Click(),这是我检查 GridColumns 并获取所有复选框的地方,当我循环遍历 GridColumns 时,没有任何内容。 - Nick Manojlovic
这意味着你的代码中Gridview的EnableViewState属性为false。 - Pankaj
让我们在聊天中继续这个讨论。点击此处进入聊天室 - Pankaj
显示剩余2条评论

0

虽然你只能在Internet Explorer中使用VBScript(我不认为其他浏览器支持它),但这被认为是一种不好的做法。要运行VB/C#.net,您必须对服务器进行某种形式的回发/回调。除此之外,请使用JavaScript。


0
不要在任何表单控件中使用 Autopostback=true,如果你想将表单数据发送到服务器端函数。
*表单页面**
 asp:Button ID="btn" runat="server" Text="Post Scrap" OnClick="btn_Click"  

*服务器端*

Sub btn_Click()

//代码在这里

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接