【问题标题】:Pass SelectedValue of DropDownList in Html.BeginForm() in ASP.NEt MVC 3在 ASP.NEt MVC 3 中的 Html.BeginForm() 中传递 DropDownList 的 SelectedValue
【发布时间】:2012-04-17 08:09:00
【问题描述】:
这是我的查看代码:
@using(Html.BeginForm(new { SelectedId = /*SelectedValue of DropDown*/ })) {
<fieldset>
<dl>
<dt>
@Html.Label(Model.Category)
</dt>
<dd>
@Html.DropDownListFor(model => Model.Category, CategoryList)
</dd>
</dl>
</fieldset>
<input type="submit" value="Search" />
}
如代码所示,我需要将dropdown 选择的值传递给BeginForm() Html 助手中的操作。你有什么建议?
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-3
razor
html-helper
html.beginform
【解决方案1】:
提交表单时将传递所选值,因为下拉列表由<select> 元素表示。您只需要调整您的视图模型,使其具有一个名为 SelectedId 的属性,例如您将绑定下拉列表:
@using(Html.BeginForm() )
{
<fieldset>
<dl>
<dt>
@Html.LabelFor(x => x.SelectedId)
</dt>
<dd>
@Html.DropDownListFor(x => x.SelectedId, Model.CategoryList)
</dd>
</dl>
</fieldset>
<input type="submit" value="Search" />
}
这假定以下视图模型:
public class MyViewModel
{
[DisplayName("Select a category")]
public int SelectedId { get; set; }
public IEnumerable<SelectListItem> CategoryList { get; set; }
}
这将由您的控制器处理:
public ActionResult Index()
{
var model = new MyViewModel();
// TODO: this list probably comes from a repository or something
model.CategoryList = new[]
{
new SelectListItem { Value = "1", Text = "category 1" },
new SelectListItem { Value = "2", Text = "category 2" },
new SelectListItem { Value = "3", Text = "category 3" },
};
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// here you will get the selected category id in model.SelectedId
return Content("Thanks for selecting category id: " + model.SelectedId);
}