2010-02-24 91 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