Antwort

0

rechts, wenn Sie die Liste im Code hinter bauen und Sie geben jeder Option eine eindeutige Kennung, dann können Sie diese Kennung greifen und es mit einem Gegenstand in Code heiraten und somit den Text.

Also;

public class MonthlyItemsFormViewModel 
{ 
    public SelectList Months; 
    public string SelectedMonth {get;set;} 
} 

dann;

public ActionResult Index() 
{ 
    MonthlyItemsFormViewModel fvm = new MonthlyItemsFormViewModel(); 
    FillData(fvm, DateTime.Now); 
    return View(fvm); 
} 

Und dann;

private void FillData(MonthlyItemsFormViewModel fvm, DateTime SelectedMonth) 
{ 
    List<string> months = DateTime.Now.MonthList(DateTime.Now); 
    fvm.Months = new SelectList(months, fvm.SelectedMonth); 
} 

Dann aus Ihrer Sicht;

<% using (Html.BeginForm()) { %> 
    <%=Html.DropDownList("selectedMonth", Model.Months) %> 
<%} %> 

Dann auf Post zurück;

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(FormCollection collection) 
{ 
    MonthlyItemsFormViewModel fvm = new MonthlyItemsFormViewModel(); 
    UpdateModel(fvm); 
    FillData(fvm, DateTime.Parse(DateTime.Now.Year.ToString() + " " + fvm.SelectedMonth + " 01")); 
    return View(fvm); 
} 

Es ist im Code auf Post zurück, dass Sie den ausgewählten Wert aus der fvm greifen und dann diesen Wert mit einem Elemente in Ihrer Auswahlliste heiraten nach oben.

Dieser Code wurde direkt von meinem Code übernommen und muss möglicherweise geändert werden, um ihn an Ihre Situation anzupassen.

Macht das Sinn?

0

Einige Code von dem, was Sie versucht haben, wäre hier Kurozakura.

In der Zwischenzeit;

Wenn Sie Ihre Ansicht an ein Modell gebunden haben, können Sie UpdateModel verwenden, um den Wert zurückzuerhalten.

Wenn Sie also an eine Klasse namens Benutzer binden, dann;

Wenn Sie nicht gebunden haben dann verwenden Sie die Technik von Eduardo und verwenden Sie etwas wie;

public ActionResult MyViewsAction(FormCollection collection) 
{ 
    string a = collection["selectListCtrlname"]; 
} 
+0

Nun, ich habe die FormCollection aber kein Glück, denn wenn Ich tat, dass es nur den Zeichenkettenwert zurückgab, der gespeichert wird, der Wert ist vom Wert der Dropdownliste, aber ich benötige den Text – kurozakura

+0

Ich bin nicht sicher, was Sie wollen, ist möglich, wenn Sie das Wertattribut jedes Optionseinzelteils einstellen auch der Text sein. So könnte eine Option wie folgt aussehen:

2

Die folgende Klasse verwendet Reflektion, um den Text für den ausgewählten Wert in der Liste abzurufen. Mehrere ausgewählte Listenelemente werden nicht unterstützt.

using System.Web.Mvc; 

/// <summary> 
/// Provides a set of static methods for getting the text for the selected value within the list. 
/// </summary> 
public static class SelectListExtensions 
{ 
    /// <summary> 
    /// Gets the text for the selected value. 
    /// </summary> 
    /// <param name="list">The list.</param> 
    /// <returns></returns> 
    public static string GetSelectedText(this SelectList list) 
    { 
     foreach(var item in list.Items) 
     { 
      var dataValuePropertyInfo = item.GetType().GetProperty(list.DataValueField); 
      var itemValue = dataValuePropertyInfo.GetValue(item, null); 

      if(itemValue != null && itemValue.Equals(list.SelectedValue)) 
      { 
       var textValuePropertyInfo = item.GetType().GetProperty(list.DataTextField); 
       return textValuePropertyInfo.GetValue(item, null) as string; 
      } 
     } 

     return null; 
    } 
}