2009-04-30 18 views
2

ich einen benutzerdefinierten Validator innerhalb eines Repeaters habenCustomValidator in einem Repeater

<asp:Repeater runat="server" ID="lstRepeater" > 
    <ItemTemplate> 
     <asp:CustomValidator ID="cvValid" runat="server" CssClass="error" EnableClientScript="False" ErrorMessage="Invalid."></asp:CustomValidator> 
     <asp:TextBox runat="server" ID="tbCustomAnswer"></asp:TextBox> 
    </ItemTemplate> 
</asp:Repeater> 

Als Test habe ich versucht, den folgenden Code auf einem Ereignis OnClick

foreach(RepeaterItem item in lstRepeater.Items) 
    { 
     CustomValidator cvValid= (CustomValidator)item.FindControl("cvValid"); 
     cvValid.IsValid = false; 
    } 

Wie angenommen werden würde, wird die Fehlermeldung wird nicht auf der Seite angezeigt, weil ich den Repeater nicht angeschlossen habe. Sobald ich jedoch den Repeater und die Datenquelle neu konstruiere, verliere ich alle alten Werte im Repeater. Gibt es einen leichten Weg dahin? Ich kann mir keinen eleganten Umgang mit diesem Problem vorstellen.

+0

Ihre Frage ist mir nicht ganz klar. Warum und wann rekonstruieren Sie den Repeater? Warum würden Sie nicht erwarten, dass die Werte verloren gehen, wenn Sie es erneut binden? – womp

+0

Ich würde erwarten, dass die Werte beim erneuten Binden verloren gehen. Ich möchte die Fehlermeldung anzeigen, ohne erneut binden zu müssen. Ich glaube jedoch nicht, dass dies möglich ist. Die einzige Lösung, die mir einfällt, ist, die alten Werte zu speichern und dann alles neu zu binden. Das scheint etwas unordentlich und ich wollte sehen, ob es eine einfachere Lösung gibt, die ich nicht sehe. Hoffentlich macht es das klarer. – Eldila

+0

Ich bin immer noch ein bisschen verloren. Wenn Sie den Repeater nicht mit Daten verbunden haben, welche "alten Werte" verlieren Sie, für die Sie Fehlermeldungen anzeigen möchten? – womp

Antwort

1

Warum kann die Funktion OnServerValidate nicht einfach false zurückgegeben werden?

<asp:CustomValidator ID="cvValid" runat="server" CssClass="error"EnableClientScript="False" ErrorMessage="Invalid."OnServerValidate="ServerValidation" /> 

void ServerValidation (object source, ServerValidateEventArgs args) 
{ 
    args.IsValid = false; 
} 
+0

Sie können dies tun, aber Sie haben immer noch das gleiche Problem. – Eldila

+1

Solange Sie die Liste auf PostBack nicht erneut binden, wird dies funktionieren. – jrummell

+0

http://forums.asp.net/t/1144321.aspx?Custom+validator+inside + repeater – Lin