2009-06-09 6 views
4

Auf einer ASP.NET MVC-Ansicht habe ich ein paar Kontrollkästchen, eine für E-Mail-Adresse und eine für Telefon. Ich möchte sicherstellen, dass mindestens eine aktiviert ist (beide können überprüft werden, so dass eine Optionsschaltfläche nicht ideal ist), und wenn keine sind, markieren Sie die Zeile mit einem roten Rahmen, genau wie eine Textbox mit der Validierungsfunktion ...ASP.NET MVC Datenvalidierung - Markieren Sie Tabellenzeile und TextBoxen

Ich habe andere Felder, die korrekt validiert werden und das CSS ändert sich, wenn es ein Problem in den Textfeldern und Textareas entsprechend gibt. Der folgende Code zeigt die Meldung den Benutzer zu informieren sie eine Kontaktpräferenz angeben müssen, aber nicht die Zeile markieren als ein Problem mit ...

SCREEN SHOT alt text http://i41.tinypic.com/2hcgfew.jpg

VIEW

<table width="100%"> 
    <tr> 
     <td> 
      <label> 
       How would you like us to contact you? 
      </label> 
     </td> 
    </tr> 
    <tr id="pref_row"> 
     <td> 
      <span class="bold-text">Email: </span>&nbsp; 
      <%=Html.CheckBox("EmailDesired")%> 
      &nbsp; &nbsp; <span class="bold-text">Phone: </span>&nbsp; 
      <%=Html.CheckBox("PhoneDesired")%> 
     </td> 
    </tr> 
</table> 

CONTROLLER

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(ContactUs contactus) 
{ 
    ContactUsService svc = new ContactUsService(); 
    // Validation 
    if (!contactus.EmailDesired && !contactus.PhoneDesired) 
     ViewData.ModelState.AddModelError("pref_row", "Please specify a contact preference (phone and/or email)!"); 

    if (ViewData.ModelState.IsValid) 
    { 
     MessageModel msg = svc.SendRequest(contactus); 
     return RedirectToAction("Index", msg); 
    } 
    else 
    { 
     return View(); 
    } 
} 
+1

Was ist mit einem Radio-Button? –

+0

Daniel - Man muss überprüft werden, aber beide können auch überprüft werden. Radiobuttons sind normalerweise für A oder B, nicht sowohl A als auch B ... – RSolberg

Antwort

4

Wenn sich HtmlHelper selbst rendert, prüft es, ob im ModelState-Dictionary ein Element vorhanden ist, das denselben Schlüssel wie der Helper selbst hat. Wenn dies der Fall ist, wird das Steuerelement mit der Attributklasse "input-validation-error" gerendert, die in der CSS-Datei definiert ist.
Der Stil wird also nur auf die gerenderten Eingabesteuerelemente angewendet.

Dies ist meine Lösung:

<table width="100%"> 
    <tr> 
     <td> 
      <label> 
       How would you like us to contact you? 
      </label> 
     </td> 
    </tr> 
    <tr class="<%=ViewData.ModelState["pref_row"]!= null ? "input-validation-error":"" %>"> 
     <td> 
      <span class="bold-text">Email: </span> 
      <%=Html.CheckBox("EmailDesired")%> 
       <span class="bold-text">Phone: </span> 
      <%=Html.CheckBox("PhoneDesired")%> 
     </td> 
    </tr> 
</table> 
+0

Ehrfürchtig! Ich werde das hier testen ... – RSolberg