2012-03-25 34 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); 
    } 
} 

希望這有助於

相關問題