2010-02-24 2 views
3

안녕 얘들 아 파이어 폭스에서 작동하지 않는하지만 두 번째 (I가 필요로하는 사람은) 내가 2 하나를 선택하면 나는 오류를 볼 수 있습니다의 RequiredFieldValidator 하나가 작동, 나는이 선택을 위해 2 requiredfiledvalidator를 사용

<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

이것은 드롭 다운 목록에서 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.IsValid을 참조하고 Validate() 아직 큰 불쾌한 예외를 발생와 Page.IsValid을 호출되지 않은 것처럼 Page_Load는 ...) 좋은 지적입니다

자동 다시 게시에서 깜박임을 없애려면 ajax UpdatePanel을 사용하여 사용자가 원활하게 작업 할 수 있습니다.

희망이 도움이됩니다.

+1

빠른 답변 주셔서 감사합니다. 그러나 여전히 작동하지 않습니다. 나는 일하기 위해 ddlMod를 먼저 선택해야합니다. IE에서는 정상적으로 작동하기 때문에 왜 이러한 일이 발생하는지 알지 못합니다. 그 밖의 무엇을 시도 할 수 있습니까? 덕분에 조언 – Giskard

관련 문제