【发布时间】:2013-01-07 13:44:03
【问题描述】:
使用 WebForms,我怎样才能有一个按钮,它是禁用的,只点击 IT 后,也通过验证后?
我知道有:Disable asp.net button after click to prevent double clicking
但是,在最后一个按钮确认预订之前,我的页面上还有其他回发,我需要允许这些回发。
这只是我需要确保通过验证的最后一次按下按钮,但在被禁用之前只允许按下一次。
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
FinalButton.Attributes.Add("onclientclick", "if(Page_ClientValidate('vg')){this.disabled = true; }");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = "Hi";
}
protected void Button3_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
}
ASPX 页面:
<p>
<asp:TextBox ID="TextBox1" runat="server" ValidationGroup="vg"></asp:TextBox>
</p>
<p>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Set TextBox1 to Hi" />
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="Set TextBox1 to Empty" />
</p>
<p>
<asp:Button ID="FinalButton" runat="server" Text="Final Submit" ValidationGroup="vg" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator" ValidationGroup="vg"></asp:RequiredFieldValidator>
</p>
因此,除非填充了文本框,否则“FinalButton”不应提交(这部分有效)。但是,如果填充了文本框,那么在回发之前应该禁用它以防止双击 - 但它不会禁用,所以我认为我的代码在这里是不正确的:
FinalButton.Attributes.Add("onclientclick", "if(Page_ClientValidate('vg')){this.disabled = true; }");
页面上的源在渲染时,按钮显示为:
<input type="submit" name="ctl00$MainContent$FinalButton" value="Final Submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$FinalButton", "", true, "vg", "", false, false))" id="MainContent_FinalButton" onclientclick="if(Page_ClientValidate('vg')){this.disabled = true; }" />
谢谢,
标记
【问题讨论】:
-
嗨 - 我已经尝试过链接到这个的 SO:aspsnippets.com/Articles/… - 但是我的页面上有回发,在最后一个之前 - 所以这个解决方案禁用了回发上的按钮做最后的提交动作。我也试过:stackoverflow.com/questions/13959256/… 和 SO/Google 上的其他链接。
-
请发布您尝试的一些代码以及错误是什么。 “我页面上的其他回发”是什么意思?那些与最终按钮有什么关系?是否所有按钮都同时处于活动状态,而您只想在其点击事件中禁用其中一个?
-
您需要其他按钮来使用 ajax 或 javascript 进行回调..您不能用一个按钮回发整个页面并期望一切都相同..
-
嗨@MikeSmithDev - 我添加了代码来显示正在发生的事情。此 Web 表单的其他部分有回发(它只是一页,但在最终回发提交所有信息之前从用户那里收集信息,这需要回发) - 再次感谢。
标签: javascript asp.net webforms