从硬编码dropdwonlist将数据发送到控制器
问题描述:
从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));
}
答
看起来您正试图从选择列表中选择一个值并将该值发送给控制器。首先,我建议你使用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);
}
}
希望这有助于
你需要一个多选择列表? IE你必须发送多个值? – 2012-03-25 00:13:56
不确定你在这里试图控制器代码将无法正常工作,因为你正在发送listYear到ViewData而不是正在被填充的列表。 – dreza 2012-03-25 00:49:12