Jak se dostat na hodnotu datafieldtext nebo selectedtext na selectlist v ASP.NET MVC?

hlasů
0

No javascript \ AJAX je třeba použít.

Položena 27/08/2009 v 03:34
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

Třída níže používá odraz dostat text pro vybranou hodnotu v seznamu. Několik vybrané položky seznamu nejsou podporovány.

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;
    }
}
Odpovězeno 20/04/2010 v 13:09
zdroj uživatelem

hlasů
0

Dobře, pokud budete stavět seznamu v kódu za sebou a dát každé možnosti jedinečný identifikátor, pak si můžete dát tento identifikátor a vzít si jej s položkou v kódu a tím textem.

Tak;

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

pak;

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

A pak;

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

Pak se podle vašeho názoru;

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

Pak na sloupku dozadu;

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

Je to v kódu na sloupku dozadu, které můžete chytit zvolenou hodnotu z FVM a pak si vzít tuto hodnotu až s položkou ve vašem seznamu select.

Tento kód zvedl přímo z mého kódu, takže může být nutné upravit tak, aby vyhovovaly vaší situaci.

Dává tohle smysl?

Odpovězeno 27/08/2009 v 04:59
zdroj uživatelem

hlasů
0

Nějaký kód na to, co jste se pokusili by se hodilo tady kurozakura.

Mezitím;

Pokud jste povinni svůj pohled na model pak můžete použít UpdateModel k získání hodnoty zpět.

Takže pokud jste se vážou na třídu nazvanou Uživatel pak;

User myUser = new User;
TryUpdateModel(myUser);

Pokud jste není vázána to pak použít techniku ​​Eduardo a použít něco podobného;

public ActionResult MyViewsAction(FormCollection collection)
{
  string a = collection["selectListCtrlname"];
}
Odpovězeno 27/08/2009 v 04:21
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more