2012-03-25 4 views
1

von textboxe Migration auf Dropdown - Notwendigkeit Wert aus einem hartkodierte Dropdown sendenSenden von Daten an die Steuerung fest codierten dropdwonlist

Der folgende Code an das Steuergerät in der Steuerung verwendet

var list = new SelectList(new[] 
             { 
              new{ID="1",Name="20012"}, 
              new{ID="2",Name="20011"}, 
              new{ID="3",Name="20010"}, 
              new {ID="4",Name="2009"}, 
              new{ID="5",Name="2008"}, 
              new{ID="6",Name="2007"}, 
              new{ID="7",Name="2006"}, 
               new{ID="8",Name="2005"}, 
               new{ID="9",Name="2004"}, 
                new{ID="3",Name="2003"}, 
                new{ID="3",Name="2002"}, 
                new{ID="3",Name="2001"}, 
                new{ID="3",Name="2000"}, 

             }, 
           "ID", "Name", 1); 
     ViewData["list"] = listYear; 

Der folgende Code wird in der Ansicht verwendet wird, ist

@using (Html.BeginForm()){ 
    <p> 
    Title: @Html.TextBox("SearchString") 
     @Html.DropDownList("list",ViewData["list"] as SelectList) 
    Genre: @Html.DropDownList("Towns", "All") 
    <input type="submit" value="Filter" /></p> 
    } 

Unterhalb der Code, der für die Textbox

verwendet wurde
if (!String.IsNullOrEmpty(year)) 
     { 
      car = Cars.Where(s => s.Year.Contains(year)); 
     } 
+0

Sie benötigen eine Multiauswahlliste? IE müssen Sie mehrere Werte senden? –

+0

nicht sicher, was Sie hier versuchen, dass Controller-Code nicht funktioniert, um mit zu beginnen, wie Sie listYear an die ViewData senden und nicht auflisten, welche die gerade bevölkert ist ... – dreza

Antwort

2

Es sieht so aus, als ob Sie versuchen, einen Wert aus einer Auswahlliste auszuwählen und diesen Wert an den Controller zu senden. Zunächst einmal würde ich vorschlagen, dass Sie ein ViewModel anstelle von Magic Strings verwenden. Sie sollten Ihre Ansicht ändern, um das neue ViewModel zu akzeptieren und das Modell dann an Ihre Aktion zu senden. Es ist einfach, sauber und wartungsfreundlich. Hier

ist, was Ihr Modell wie

public class VehicleYearsViewModel { 

    public SelectList VehicleYears { get; set; } 
    public int SelectedYear { get; set; } 

    public VehicleYearsViewModel() { 
     VehicleYears = new SelectList(new[] 
            { 
             new{ID="1",Name="2012"}, 
             new{ID="2",Name="2011"}, 
             new{ID="3",Name="2010"}, 
             new{ID="4",Name="2009"}, 
             new{ID="5",Name="2008"}, 
             new{ID="6",Name="2007"}, 
             new{ID="7",Name="2006"}, 
             new{ID="8",Name="2005"}, 
             new{ID="9",Name="2004"}, 
             new{ID="3",Name="2003"}, 
             new{ID="3",Name="2002"}, 
             new{ID="3",Name="2001"}, 
             new{ID="3",Name="2000"} 
            } 
    } 
} 

Ihre Ansicht aussehen würde dann wie so aussehen:

@YourAppName.Models.VehicleYearsViewModel 

@using (Html.BeginForm()){ 
    @Html.ValidationSummary(true) 
    @Html.DropDownListFor(model => model.SelectedYear, Model.VehicleYears, "ID", "Name", 1)) 
    <input type="submit" value="OK" /> 
} 

Ihre Controller-Aktion würde das Modell annehmen und die Nutzung des gewählten Wertes machen kann als ein Int-Datentyp. Ich kann nur raten, da der Controller Aktion nicht gebucht wird, aber das ist ziemlich viel, was es aussehen würde:

public class HomeController : Controller { 

    public ActionResult Index() { 
     var model = new VehicleYearsViewModel(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(VehicleYearsViewModel model) { 
     if(ModelState.IsValid) { 
      // you can get selected year like so 
      int selectedYear = model.SelectedYear; 
      // ... your code here to do whatever with selectedYear 
     } 
     return View(model); 
    } 
} 

hoffe, das hilft

Verwandte Themen