2009-06-16 14 views
4

Ich verwende oft Regex-Ausdruck-Validatoren, die auch ein Pflichtfeld sind. Was zu überflüssigen Steuerelementen auf der Seite führt. Es gibt keine "Erforderlich" -Eigenschaft des Regex-Validators, was bedeutet, dass ich ein anderes Steuerelement benötige. Gefällt mir:Wie RegularExpressionValidator-Steuerelement und RequiredFieldValidator kombinieren?

<asp:TextBox ID="tbCreditCardNumber" runat="server" Width="200"></asp:TextBox> 
<asp:RegularExpressionValidator ID="revCreditCardNumber" runat="server" 
    ControlToValidate="tbCreditCardNumber" ValidationGroup="CheckoutGroup" ErrorMessage="Invalid Credit Card Number!" 
    ValidationExpression="^(3[47][0-9]{13}|5[1-5][0-9]{14}|4[0-9]{12}(?:[0-9]{3})?)$">*</asp:RegularExpressionValidator> 
<asp:RequiredFieldValidator ID="rfvCreditCardNumber" runat='server' ControlToValidate="tbCreditCardNumber" ValidationGroup="CheckoutGroup" 
    ErrorMessage="Credit Card Number Required">*</asp:RequiredFieldValidator> 

Gibt es eine Möglichkeit, die beiden Steuerelemente zu kombinieren, damit ich nicht so viel Code eingeben muss?

+1

Jeder Grund, warum Sie keinen benutzerdefinierten Validator verwenden würden? – Avitus

+0

Warum nicht einfach in Ihrem Regex nach Leerzeichen suchen? Auf diese Weise ist kein erforderlicher Feldvalidierer erforderlich. – dannmate

Antwort

3

Sie können Ihren eigenen CustomValidator rollen, indem Sie die Funktionalität kombinieren. Ansonsten, nein, nicht zu meinem Wissen.

+0

Ich hatte davor Angst. Es war jedoch eine Frage wert. –

0

Um genauer zu sein, müssen Sie die ValidateEmptyMessage-Eigenschaft von CustomValdiator auf true festlegen, andernfalls validiert er keine leeren Eingabefelder. Beispiel:

<script type="text/javascript"> 
    function clientValidate(sender, args){ 
     if (args.Value.length == 0) { 
      args.IsValid = false; 
     } 
    } 

</script> 
<asp:CustomValidator runat="server" 
     ID="CustomValidator" 
     ControlToValidate="TextBox1" 
     ClientValidationFunction="clientValidate" 
     ValidateEmptyText="true" 
     Text="Error!"> 
    </asp:CustomValidator> 

Aber, wie Sie dies in keiner Weise kürzer als Ihre früheren Code sehen können, so dass, wenn es bis zu mir ist, gibt es keinen Punkt in Verwendung von benutzerdefinierten Validator in diesem Fall. Wie bei der ursprünglichen Frage gibt es leider keine Möglichkeit, den Standard-RegExpressValidator dazu zu bringen, leere Eingabefelder zu validieren.

1

können Sie außer Kraft setzen EvaluateIsValid Methode

public class RegularExpressionValidatorEx : RegularExpressionValidator 
{ 
    protected override bool EvaluateIsValid() 
    { 
     string controlValidationValue = base.GetControlValidationValue(base.ControlToValidate); 
     if ((controlValidationValue == null) || (controlValidationValue.Trim().Length == 0)) 
     { 
      return false; 
     } 
     return base.EvaluateIsValid(); 
    } 

    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     Page.ClientScript.RegisterStartupScript(GetType(), "customVal", ClientID + @".evaluationfunction = function(val){ 
var value = ValidatorGetValue(val.controltovalidate); 
if (ValidatorTrim(value).length == 0) 
    return false; 
return RegularExpressionValidatorEvaluateIsValid(val);}", true); 

    } 
} 
+0

das ist schön! Aber wie steht es mit der Kundenseite? –

+0

Ich denke, CustomValidator ist eine bessere Idee, aber Sie könnten den gleichen Trick;), Override Evaluierungsmethode auf der Client-Seite geschützte Überschreibung void OnPreRender (EventArgs e) { base.OnPreRender (e); Page.ClientScript.RegisterStartupScript (GetType() "customVal", ClientID + @“evaluationfunction = function (val) { var value = ValidatorGetValue (val.controltovalidate). if (ValidatorTrim (Wert) .length == 0) Rückgabe false; Rückgabe RegularExpressionValidatorEvaluateIsValid (val); } ", true); } – Gagarin

6

Ein häufiges Problem ist, dass der Validator Komponente noch Platz in Anspruch nimmt, wenn es nicht gezeigt wird, was seltsam aussieht, wenn Sie mehrere haben und also die letzte ausgelöst wird verlassen eine größere Lücke zum Sternchen oder anderen Fehlermarker. Dies kann leicht durch Hinzufügen von:

display="Dynamic" 

... zum Validator gelöst werden.

Aber es löst nicht das Problem von mehreren trigging zur gleichen Zeit, die immer noch viele Validator Fehler in einer Zeile zeigen wird. Ein kundenspezifischer Validierer wäre dann wahrscheinlich die beste Lösung.

Verwandte Themen