2010-05-28 3 views
2

Je crée un menu déroulant viaASP.NET MVC 2 - Comment puis-je obtenir la valeur sélectionnée à partir d'une liste déroulante dans mon modèle de vue?

<%= Html.DropDownList("data.Language", Model.LanguageOptions) %>

et que vous voulez relire sa valeur grâce à un modèle automatique liant dans mon LanguageModel viewmodel:

public ActionResult Save(LanguageModel data) 

Cependant, data.Language est nulle lorsque la méthode Save est appelée.

Comment puis-je obtenir la valeur sélectionnée à partir de mes données.Liste déroulante de la langue en données.Langue?

Répondre

0

Je ne sais pas comment votre contrôleur l'action et le modèle ressemblent mais cela fonctionne vraiment:

modèle:

public class LanguageModel 
{ 
    public string Language { get; set; } 
    public IEnumerable<SelectListItem> LanguageOptions 
    { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "en", Text = "English" }, 
       new SelectListItem { Value = "fr", Text = "French" }, 
      }; 
     } 
    } 
} 

Controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new LanguageModel()); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(LanguageModel data) 
    { 
     return View(data); 
    } 
} 

Vue:

<% using (Html.BeginForm()) { %> 
    <%= Html.DropDownList("Language", Model.LanguageOptions) %> 
    <input type="submit" value="OK" /> 
<% } %> 

<div><%= Html.Encode(Model.Language) %></div> 

Bien sûr, si vous utilisez ASP.NET MVC 2.0, l'assistant DropDownListFor fortement typé est préférable.

+0

Il semble que mon problème est plus grand que cela. J'ai utilisé FireBug pour vérifier les valeurs, et elles sont en fait soumises correctement. Je n'ai tout simplement rien arriver dans ma méthode d'action (ViewData ne contient rien). J'ai posé une question distincte ici une fois que j'ai découvert que c'est la question sous-jacente: http://stackoverflow.com/questions/2931805/asp-net-mvc-2-viewdata-empty-after-post – Alex

+0

Qu'attendez-vous pour trouver dans ViewData dans une publication? Il est utilisé pour que le contrôleur envoie des données à la vue et non l'inverse. Regardez dans Request ["data1"] 'ou mieux encore dans les paramètres de l'action du contrôleur. –

0

se débarrasser des données.

<%= Html.DropDownList("Language", Model.LanguageOptions) %> 

Ou essayez:

<%= Html.DropDownListFor(m => m.Language, Model.LanguageOptions) %> 

(bien que m.Langage ne peut pas avoir raison - cela dépend de la façon dont votre modèle de vue est mis en place)

+0

Se débarrasser des données ne fonctionne pas. – Alex

+0

Comment faire le même processus en arrière, c'est-à-dire de 'View' à' Controller'? – Jogi

Questions connexes