2012-03-25 111 views
1

从textboxe迁移到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你必须发送多个值? – 2012-03-25 00:13:56

+0

不确定你在这里试图控制器代码将无法正常工作,因为你正在发送listYear到ViewData而不是正在被填充的列表。 – dreza 2012-03-25 00:49:12

回答

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

你的看法则看起来像这样:

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

希望这有助于

相关问题