如何使用 BeginForm 将 DropDownList 的 SelectedValue 从视图发送到控制器?
这是我的代码:
@using (Html.BeginForm(new { newvalue=ddl.SelectedValue}))
{
@Html.DropDownList("categories",
(List<SelectListItem>)ViewData["categories"],
new { onchange = "this.form.submit()", id = "ddl" })
请勿使用
ViewData
或 ViewBag
代替您的模型。它很草率,容易出错,而且只是一种无组织的提供视图数据的方式。
{ newvalue = ddl.SelectedValue }
放在表格本身上时不会为您做任何事情。您需要了解,您编写的所有内容都会在发送到客户端之前在服务器上进行评估。因此,如果
newvalue
解析为 1
,它将永远保持为 1,除非您有 javascript 在客户端更改它(您没有这样做,也不应该这样做)。
首先你需要一个模型:
public class CategoryModel()
{
public IEnumerable<SelectListItem> CategoriesList { get; set; }
public int SelectedCategoryId { get; set; }
}
控制器
public class CategoryController()
{
public ActionResult Index()
{
var model = new CategoryModel();
model.CategoriesList = new List<SelectListItem>{...};
return View(model);
}
public ActionResult SaveCategory(CategoryModel model)
{
model.SelectedCategoryId
...
}
}
查看
@model CategoryModel
@using(Html.BeginForm("SaveCategory","Category"))
{
@Html.DropDownListFor(x=> x.SelectedCategoryId, Model.CategoriesList)
<button type="submit">Submit</button>
}
这里发生的是
SelectList
正在从 IEnumerable
填充,其表单名称为 SelectedCategoryId
,这就是返回到服务器的内容。
我不确定你对 http 和 html 的了解到了哪里,但是在你了解 http 和 html 如何工作以及这些帮助器(例如
begin form and Html.DropDownList
)实际上为你做什么之前,你不应该使用任何框架。在尝试使用螺丝刀之前先了解螺丝的工作原理。