Répondre

0

droit, si vous construisez la liste dans le code derrière et vous donner chaque option un identifiant unique, alors vous pouvez récupérer cet identifiant et l'épouser avec un élément de code et donc le texte.

Ainsi;

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

puis;

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

Et puis;

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

Puis dans votre vue;

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

Puis à la publication;

[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); 
} 

Il est dans le code sur le post de retour que vous pouvez saisir la valeur sélectionnée de la FVM avant de se marier cette valeur avec un élément dans votre liste de sélection.

Ce code a été extrait directement de mon code et devrait donc être modifié en fonction de votre situation.

Est-ce que cela a du sens?

0

Un peu de code de ce que vous avez essayé serait utile ici kurozakura.

En attendant;

Si vous avez lié votre vue à un modèle, vous pouvez utiliser UpdateModel pour récupérer la valeur. Donc, si vous vous liez à une classe appelée Utilisateur, alors;

User myUser = new User; 
TryUpdateModel(myUser); 

Si vous ne l'avez pas lié, utilisez la technique d'Eduardo et utilisez quelque chose comme;

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

bien que j'aie utilisé le FormCollection mais pas de chance, coz si Je l'ai fait cela retournerait juste la valeur de chaîne qui est stockée, la valeur est de la valeur de la liste déroulante, mais j'ai besoin du texte – kurozakura

+0

Je ne suis pas sûr que ce que vous voulez est possible sauf si vous définissez l'attribut Valeur de chaque élément d'option être le texte aussi. Donc une option peut ressembler à mais je ne sais pas jusqu'où cela vous mènerait. Il y a un autre moyen, voir la réponse suivante. – griegs

2

La classe ci-dessous utilise la réflexion pour obtenir le texte de la valeur sélectionnée dans la liste. Plusieurs éléments de liste sélectionnés ne sont pas pris en charge.

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; 
    } 
} 
Questions connexes