Frage

Diese Frage bezieht sich auf ASP.NET MVC 2 RC (Dezember drop). Das grundlegende Problem ist, dass, wenn ein Dropdown-Liste mit einem Standard ausgewählten Wert zu schaffen, die „ausgewählt“ Attribut ist entweder nicht in HTML gerendert oder an die falsche Option zugeschrieben wird.

Hier ist ein Code für die falsche Option Problem zu demonstrieren:

Hier ist eine Funktion, einige Werte [AttributeService Klasse] zu generieren:

public static Dictionary<int, string> MonthOfBirth
    {
        get
        {
            Dictionary<int, string> months = new Dictionary<int, string>();
            for (int i = 0; i <= 11; i++)
            {
                months.Add(i, CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
            }
            return months;
        }
    }

Hier ist eine Erweiterung Helfer eine Liste von SelectListItems zu erstellen:

public static List<SelectListItem> ToSelectList<T>(
        this IEnumerable<T> enumerable,
        Func<T, string> text,
        Func<T, int> value,
        string defaultOption
        )
    {
        var items = enumerable.Select(x => new SelectListItem
        {
            Text = text(x),
            Value = value(x).ToString(),
            Selected = false
        }).ToList();

        items.Insert(0, new SelectListItem
        {
            Text = defaultOption,
            Value = "-1",
            Selected = true
        });

        return items;
    }

Dieser Code-Schnipsel bindet die beiden oben zusammen:

 public List<SelectListItem> MonthOfBirthList
    {
        get
        {
            return AttributeService.MonthOfBirth.OrderBy(x => x.Key).ToSelectList(x => x.Value, x => x.Key,
                                                 "Month");
        }
    }

Die ersten beiden Schnipsel befinden sich in verschiedenen Klassen und die dritte lebt in meinem Ansichtsmodell, das der Controller spuckt nur auf den Blick aus. Also meiner Ansicht habe ich dann:

<%=Html.DropDownListFor(x=>x.MonthOfBirth, Model.MonthOfBirthList, new { @class = "panel_4_month" })%>

Beachten Sie, dass meine Erweiterungsmethode eine Standard SelectListItem in an Position Index 0, mit einem Standardwert addiert und Selected = true. Als ich lege einen Haltepunkt auf dem Controller zu sehen, was das Modell die Liste enthält bestellt korrekt und die richtige Option eingestellt ist, ausgewählt.

Der HTML-Code, ich aber tatsächlich bekommen, ist dies:

<select class="panel_4_month" id="MonthOfBirth" name="MonthOfBirth">
  <option value="-1">Month</option>
  <option selected="selected" value="0">January</option>
  <option value="1">February</option>
  <option value="2">March</option>
  etc...
</select>

Primäre Frage ist dann, ob mein Code falsch ist, oder ob ein Fehler in dem HTML-Renderer ist da? Ich bin glücklich, eine VS28K Lösung mit Beispielcode irgendwo zu laden, wenn dies nicht genug Informationen. Danke.

War es hilfreich?

Lösung

Ich kann nicht Ihre Controller-Methode sehen, aber ich glaube, das Problem ist. Wenn Sie die folgenden in Ihrem Controller einstellen sollten Sie gewählten Monat sehen.

public ActionResult Edit(string id)
{
  User myModel = UserServiceFactory.GetUser(id);
  myModel.MonthOfBirth = -1;
  return View(myModel);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top