2010-05-19 3 views
1

je le code suivant dans mon contrôleur (pour éditer et de créer):ASP.NET MVC DropDownList SelectedValue fonctionne sur l'action Edition, mais pas l'action Créer

model.Templates = new SelectList(PageManagementService.PageTemplateFetchList(), "PageId", "Title", 213); 

le « 213 » est un identifiant pour l'un des les pages - juste l'utiliser pour tester.

Et cela est à mon avis (pour éditer et de créer):

<%= this.Html.DropDownListFor(model => model.Page.TemplateId, this.Model.Templates)%> 
<%= this.Model.Templates.SelectedValue %> 

Quand je vais à la forme Créer, je vois la liste déroulante, mais la balise avec value = « 213 » est pas sélectionné. Je produis même le SelectedValue pour m'assurer qu'il est 213 - et je vois 213.
Quand je vais au formulaire d'édition, je vois la liste déroulante, et l'étiquette avec la valeur = "213" est choisi.

Dans le formulaire Créer, aucun des balises n'a un attribut "sélectionné".
Dans le formulaire Modifier, la balise avec la valeur = "213" a l'attribut "selected".

Ai-je raté quelque chose? Qu'est-ce qui peut causer cela? Quelqu'un voit ce comportement avant?

MISE À JOUR: Modifier le nom de la liste déroulante le fait fonctionner. Par exemple, au lieu de

<%= this.Html.DropDownListFor(model => model.Page.TemplateId, this.Model.Templates)%> 

j'ai fait

<%= this.Html.DropDownList("somedropdown", this.Model.Templates)%> 

et cela a fonctionné. Vous ne savez pas pourquoi ...

Répondre

1

Cela peut se produire car le DataValueField est un objet chaîne et il peut y avoir une incompatibilité de type.

Essayez quelque chose comme ceci:

model.Templates = new SelectList(PageManagementService.PageTemplateFetchList(), "PageId", "Title", "213"); 
+0

Cela ne fonctionne pas. Mais, changer le nom de la liste déroulante a fonctionné. Des idées? – davekaro

+0

Mais l'enregistrement ne fonctionne pas maintenant, non? Le problème réside probablement dans DropDownListFor ('model => model.Page.TemplateId' ...) Ceci est assez complexe pour la méthode' EditorForModel' à comprendre. Ajouter un champ fictif int à votre modèle pourrait le faire fonctionner: 'DropDownlistFor (model => model.DummyField, Model.Templates)' –

+0

Eh bien, l'enregistrement a fonctionné car j'ai saisi manuellement la valeur sélectionnée dans FormCollection. J'ai essayé d'ajouter un champ int idiot à mon modèle - mais cela n'a pas fonctionné non plus. Pour l'instant, je vais utiliser ce qui fonctionne. – davekaro

Questions connexes