2010-03-23 6 views
7

J'essaie d'utiliser le Html.DropDownListFor <> HtmlHelper et j'ai un peu de difficulté à lier sur la publication. Le HTML rend correctement mais je n'ai jamais une valeur "sélectionnée" lors de la soumission.MVC2 Liaison ne fonctionne pas pour Html.DropDownListFor <>

<%= Html.DropDownListFor(m => m.TimeZones, 
           Model.TimeZones, 
           new { @class = "SecureDropDown", 
             name = "SelectedTimeZone" }) %> 

[Bind(Exclude = "TimeZones")] 
    public class SettingsViewModel : ProfileBaseModel 
    { 
     public IEnumerable TimeZones { get; set; } 
     public string TimeZone { get; set; } 

     public SettingsViewModel() 
     { 
      TimeZones = GetTimeZones(); 
      TimeZone = string.Empty; 
     } 

     private static IEnumerable GetTimeZones() 
     { 
      var timeZones = TimeZoneInfo.GetSystemTimeZones().ToList(); 
      return timeZones.Select(t => new SelectListItem 
         { 
          Text = t.DisplayName, 
          Value = t.Id 
         }); 
     } 
    } 

J'ai essayé quelques choses différentes et je suis sûr que je suis en train de faire quelque chose de stupide ... mais pas sûr de ce qu'il est :)

Répondre

12

Voici un exemple que je vous ai écrit pour illustrer la l'utilisation de la méthode d'aide DropDownListFor:

Modèle:

public class SettingsViewModel 
{ 
    public string TimeZone { get; set; } 

    public IEnumerable<SelectListItem> TimeZones 
    { 
     get 
     { 
      return TimeZoneInfo 
       .GetSystemTimeZones() 
       .Select(t => new SelectListItem 
       { 
        Text = t.DisplayName, Value = t.Id 
       }); 
     } 
    } 
} 

Controller:

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

    [HttpPost] 
    public ActionResult Index(SettingsViewModel model) 
    { 
     return View(model); 
    } 
} 

Vue:

<% using (Html.BeginForm()) { %> 
    <%= Html.DropDownListFor(
     x => x.TimeZone, 
     Model.TimeZones, 
     new { @class = "SecureDropDown" } 
    ) %> 
    <input type="submit" value="Select timezone" /> 
<% } %> 

<div><%= Html.Encode(Model.TimeZone) %></div> 
+0

qui a fait l'affaire. Qu'est-ce que je faisais de mal? – devlife

+0

Comme vous n'avez montré qu'une partie de votre code, je ne peux pas dire ce qui ne va pas. –

+0

Je vois ce que j'ai fait de mal. Plutôt que de faire le DropDownListFor (x => x.TimeZone) je l'ai fait pour x.TimeZones. Merci pour l'aide Darin. – devlife