2012-03-25 2 views
1

Перенастройка из textboxe в DropDownList - нужно отправить значение из закодированного DropDownList в контроллерпередачи данных из закодированного dropdwonlist к контроллеру

Приведенный ниже код используется в контроллере

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; 

Код ниже используется в представлении

@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> 
    } 

Ниже приведен код, который был использован для текстового поля

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

вам нужен мульти список выбора? IE вы должны отправить несколько значений? –

+0

не уверен, что вы пытаетесь здесь, что код контроллера не будет работать, поскольку вы отправляете listYear в ViewData, а не в список, который заполняется ... – dreza

ответ

2

Похоже, вы пытаетесь выбрать значение из списка выбора и отправить это значение контроллеру. Прежде всего, я предлагаю вам использовать ViewModel вместо магических строк. Вы должны изменить свой вид, чтобы принять новый ViewModel, а затем отправить модель в свое действие. Это просто, чище и удобнее.

Вот что ваша модель будет выглядеть

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"} 
            } 
    } 
} 

Your View тогда будет выглядеть так:

@YourAppName.Models.VehicleYearsViewModel 

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

Ваше действие контроллер будет принимать модель и может использовать выбранное значение в качестве int тип данных. Я просто предполагаю, так как ваши действия контроллера не отвечали, но это довольно много, что она будет выглядеть так:

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

Надеется, что это помогает

Смежные вопросы