我正在使用带有框架3.5和Ajax Control Toolkit .NET 3.5的Visual Studio 2010。
我在asp.net网络表单网站上工作。
在表格上我有这个:文本框,图像按钮,按钮,日历和requiredfieldvalidator:
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<p>
<br />
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<asp:Label id="Label3" runat="server">Date</asp:Label>
<asp:textbox id="txtInitialDate" runat="server" Width="75px" MaxLength="10"></asp:textbox>
<asp:ImageButton ID="imgBegin"
ImageUrl="~/images/Icon1.jpeg" runat="server"
AlternateText="" Height="24px" Width="24px" />
<asp:CalendarExtender ID="CalendarExtender1" runat="server"
TargetControlID="txtInitialDate"
PopupPosition="BottomLeft" PopupButtonID="imgBegin"
>
</asp:CalendarExtender>
<asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" ErrorMessage="*" ControlToValidate="txtInitialDate"
Display="Dynamic"></asp:requiredfieldvalidator>
<asp:button id="Button2" runat="server" Text="Send" onclick="Button2_Click"></asp:button>
</asp:Content>
代码背后的代码:
override protected void OnInit(EventArgs e)
{
Button2.Attributes.Add("onclick", "javascript:" + Button2.ClientID + ".disabled=true;" + "javascript:" + Button2.ClientID + ".value='Processing.';" + this.GetPostBackEventReference(Button2) + ";");
base.OnInit(e);
}
protected void Button2_Click(object sender, EventArgs e)
{
string a = "some_value";
}
此处的互动是用户点击ImageButton,日历显示,用户点击日期然后点击按钮。
问题:
如果我运行网站并首先点击ImageButton并选择一个日期,那么当点击该按钮时不会触发任何事件。
但是如果我评论验证器的代码:
<asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" ErrorMessage="*" ControlToValidate="txtInitialDate"
Display="Dynamic"></asp:requiredfieldvalidator>
然后正确触发事件。
我希望能够使用requiredfieldvalidator,但我不希望它与按钮产生冲突
为什么会发生这种情况?如何解决这个问题?
...谢谢
答案 0 :(得分:1)
在图像按钮标记中使用CausesValidation=False
:
<asp:ImageButton ID="imgBegin" CausesValidation="False" ImageUrl="~/images/Icon1.jpeg" runat="server" Height="24px" Width="24px" />
您也可以在标记中添加Button2
的javascript(而不是OnInit
代码隐藏)。只需在OnclientClick
标记
Button2
属性即可