2010-09-07 10 views
0

Je crée un formulaire de recherche fortement typé dans ASP.NET MVC 2 qui publie sur une page de résultats via FormMethod.Get (à savoir, les entrées de formulaire et leurs valeurs sont enregistrées dans la chaîne de requête des résultats de recherche). Comment puis-je spécifier les helpers html fortement typés qui utilisent une classe imbriquée du modèle au lieu du modèle lui-même afin que je n'obtienne pas la notation point pour les noms d'entrée dans la chaîne de requête?Comment spécifier une aide html fortement typée qui utilise une classe imbriquée du modèle au lieu du modèle lui-même?

Ma classe de modèle de vue fortement typé ressemble:

public class SearchViewModel 
{ 
    public SearchQuery SearchQuery { get; set; } 

    public IEnumerable<SelectListItem> StateOptions { get; set; } 
    ... 
} 

La classe SearchQuery ressemble:

public class SearchQuery 
{ 
    public string Name { get; set; } 
    public string State { get; set; } 
    ... 
} 

Faire ceci:

<%= Html.TextBoxFor(m => m.SearchQuery.Name)%> 

volonté généré une entrée avec le nom SearchQuery.Name, qui placera &SearchQuery.Name=blah dans la chaîne de requête lorsque le formulaire est posté. Au lieu de cela, je préférerais simplement &Name=blah, car seules les propriétés de SearchQuery auront des éléments de formulaire associés.

Je suppose que je dois faire quelque chose avec l'expression Linq Html.TextBoxFor, mais je ne peux pas sembler obtenir le droit de syntaxe ..

Merci pour votre aide !!

Répondre

0

Une façon de contourner cela est de faire Citez un propery du ViewModel-à-dire:

public string Name{ get{ return this.SearchQuery.Name; } }

Et dans la vue:

<%= Html.TextBoxFor(m => m.Name)%>

Que ce soit ou non est une bonne idée est une autre question.

+0

Je ne suis pas sûr que je suis ce que je viens de vous montrer est fonctionnellement équivalent à ce que vous faites déjà, MVC n'ajoutera simplement pas le préfixe SearchQuery. C'est-à-dire, dans la vue, m.Name et m.SearchQuery.Name sont les mêmes, le premier est juste un "raccourci" vers le second. – automagic

+0

Désolé, je n'ai pas regardé assez attentivement votre réponse. Le problème est que je dois créer un ensemble de propriétés en double sur le modèle de vue qui reflète les propriétés SearchQuery. Il serait préférable si je pouvais éviter d'avoir à faire cela .. – user441685

+0

note ... J'ai supprimé mon premier commentaire car ce n'était pas pertinent. – user441685