2010-02-24 97 views
3

嗨,大家好我用2 requiredfiledvalidator 2个选择,一个是工作,但第二个(一个我需要的)心不是的RequiredFieldValidator不火狐下工作

<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

我相信这是一个已知的asp.net限制在下拉列表中使用AutoPostBack="true"属性。 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是一个好点)好像你参考Page.IsValidValidate()尚未被称为Page.IsValid与抛出一个很大的讨厌的例外...

如果你想摆脱自动回发的闪烁,你也可以使用ajax UpdatePanel使用户无缝连接。

希望这会有所帮助!

+1

感谢您的快速回答,但仍然无法正常工作。我仍然需要先选择ddlMod才能工作。我不知道为什么会发生这种情况,因为在IE浏览器下它工作得很好。 我还能尝试什么?谢谢你的建议 – Giskard 2010-02-25 15:02:37