2009-10-05 8 views
3

J'en ai un bizarre. Je suis en train de rendre un textarea standard en utilisant simplement l'aide TextArea:Spark View Engine Html.TextArea Bug?

<p> 
     <label for="Message">Message:</label> 
     ${ Html.TextArea("IssueText") } 
     ${ Html.ValidationMessage("IssueText", "*") } 
    </p> 

Et mon contrôleur

public ActionResult Contact() { 
      return View(); 
    } 
    [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Contact(FormCollection form) { 
      Seller user = _session.AuthenticatedSeller; 
      ServiceTicket ticket = new ServiceTicket(user, form["IssueText"], 
       form["ContactReason"]); 
      if (ticket.IsValid) { 
       _servicetTicketRepository.Add(ticket); 
       _servicetTicketRepository.Commit(); 
       return RedirectToAction("Index", "MyPlace"); 
      } 

      ModelState.AddModelErrors(ticket.GetRuleViolations()); 
      return View(); 
     } 

Et sur la première charge de la page, il fonctionne très bien et rend le textarea

Before http://cadred.net/personal/contact-before.png

Cependant, lorsque je soumets le formulaire pour tester la validation, il ne rend le textarea

After http://cadred.net/personal/contact-after.png

+0

Je le présenterais à la liste de diffusion spark-dev. –

+0

Bonne suggestion. –

Répondre

3

La raison pour laquelle vous obtenez le code d'allumage au lieu de la zone d'essai est due à une exception ref null se produit quand il tente d'exécuter les instructions connexes de html.textarea.

Retouchez votre vue comme suit et vous serez en mesure de percer dans le code de vue généré par spark dans un débogueur.

<p> 
    <label for="Message">Message:</label> 
# System.Diagnostics.Debugger.Break(); 
    ${ Html.TextArea("IssueText") } 
    ${ Html.ValidationMessage("IssueText", "*") } 
</p> 

Maintenant, vous pouvez F5 du projet et vous devriez obtenir une boîte de dialogue demandant de lancer un débogueur lorsque vous appuyez sur la vue, ignorez la première fois (appuyez sur No) et lancer un débogueur la deuxième fois (après avoir frappé soumettre). La liste doit inclure l'instance VS à partir de laquelle vous avez exécuté le projet, sélectionnez-la et c'est parti.

Rechercher des valeurs nulles autrement, supprimer des points d'arrêt dans la capture try qui restitue la zone de texte et dans le gestionnaire d'interception. J'espère que vous obtiendrez suffisamment d'informations pour vous permettre de déterminer ce qui se passe.

+0

Je reçois en effet une exception de référence nulle, mais je ne peux pas vraiment trouver ce qui est nul. Rien ne me saute dessus. C'est le code qui le génère: Output.Write (Html.TextArea ("Message")); Ni "Sortie" ni "Html" ne sont null. –

+0

Autant que je sache, cela n'arrive que lorsqu'il y a une erreur de validation pour ce champ. Si je désactive la validation pour ce champ particulier, il ne se casse pas. –

+0

Étape dans l'appel Html.TextArea ("Message"), le NRE sera généré quelque part là-dedans. – Neal