2008-09-22 11 views
1

Le code suivant est dans l'action /Courses/Detail:MVC Preview 5 - ViewData/HTML Helper Quirk

[AcceptVerbs("GET")] 
    public ActionResult Detail(int id) 
    { 
     ViewData["Title"] = "A View Title"; 
     return View(tmdc.GetCourseById(id)); 
    } 

La méthode tmdc.GetCourseById(id) retourne une instance de type Course pour la vue. Dans la vue J'utilise

<%= HTML.TextBox("Title")%> 

pour afficher la valeur de la propriété Title pour l'objet Course. Au lieu de cela, la zone de texte affiche la chaîne A View Title. Est-ce un comportement normal/prévu? Quelle serait la meilleure façon de gérer cela?

Mise à jour
Pour contourner ce problème, j'ai changé ViewData["Title"]-ViewData["VIEW_TITLE"] mais cela comme un moyen plus propre pour gérer cette collision ou de savoir si cela est un résultat attendu.

Répondre

1

Malheureusement, je ne suis pas sur ma machine de développement en ce moment, donc je ne peux pas tester cela, mais avez-vous essayé quelque chose comme ça?

<%= Html.TextBox("Title", ViewData.Model.Title) %> 
1

Oui, ce comportement est conforme aux spécifications. L'intention est que vous devriez être en mesure d'afficher (à votre avis) une entrée d'utilisateur invalide qui ne pourrait jamais être affectée en tant que propriété d'une instance de votre type de modèle. Vous pouvez en savoir plus sur cette fonctionnalité dans this blog post.

Votre solution de contournement est correcte, mais elle met en évidence le problème d'un espace de noms d'affichage encombré. Gardez à l'esprit qu'en plus des propriétés de votre modèle et ViewData, il y a aussi des éléments TempData, ModelState et HTML.

Si vous souhaitez toujours afficher la propriété de modèle "Titre", vous pouvez utiliser l'une des surcharges HTML.TextBox qui accepte une valeur littérale au lieu d'un nom de propriété.

+0

Merci pour l'aide Craig ... J'ai oublié les conflits possibles avec TempData et les autres. – mwilkes

Questions connexes