大家好我使用2个requiredfiledvalidator进行2次选择,一个正在工作,但第二个(我需要的那个)不是
<asp:dropdownlist id="ddlMod" runat="server" Width="235px" AutoPostBack="True" Font-Names="Arial" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Mod" InitialValue="00" Display="Dynamic" ControlToValidate="ddlMod">
</asp:requiredfieldvalidator>
<asp:dropdownlist id="ddlInd" runat="server" Width="235px" AutoPostBack="True" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Ind" InitialValue="0" Display="Dynamic" ControlToValidate="ddlInd">
</asp:requiredfieldvalidator>
如果我选择第二个,我可以看到第一个的错误信息,但是如果我不选择任何一个或者如果我选择第一个,我看不到任何消息。 谢谢!
答案 0 :(得分:0)
我相信这是使用下拉列表中的AutoPostBack="true"
属性的已知asp.net限制。 AutoPostBack
属性会否定验证过程并回发。
作为一种简单的解决方法,您可以通过修改页面加载事件在回发期间进行验证:
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack)
Page.Validate();
}
这将导致在AutoPostBack
情况之后仍然发生验证。如果下拉列表值不正确,页面将刷新,并显示按预期显示的错误消息。缺点是屏幕会闪烁,等等。但是,唯一的另一个选择是为每个DropDownList
控件添加自定义客户端验证脚本,我个人认为这不值得。
使用上面的代码,请记住,当页面自动回发时,它实际上可能无效 - 但您可能调用的其他方法可能期望有效页面。使用Page.IsValid
属性来防止这种情况。 (对于经过验证的表格,使用Page.IsValid
实际上是最佳做法。)
示例:强>
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack)
Page.Validate();
ddlMod.SelectedIndexChanged += new EventHandler(ddlMod_SelectedIndexChanged);
if(Page.IsValid)
{
//load some data; do some things...
}
}
protected void ddlMod_SelectedIndexChanged(object sender, EventArgs e)
{
if(Page.IsValid)
{
//do some stuff if the page validated
}
}
最后一个注意事项 - 您需要确保在页面生命周期的早期调用Page.Validate()
(Page_Load
是一个好点),就像您引用{{1 }}和Page.IsValid
尚未被调用,Validate()
会引发一个非常讨厌的例外......
如果您想摆脱自动回发中的闪烁,您还可以使用ajax Page.IsValid
为用户提供无缝连接。
希望这有帮助!