如何使用 BeginForm 将 DropDownList 的 SelectedValue 从视图发送到控制器?

问题描述 投票:0回答:1

如何使用 BeginForm 将 DropDownList 的 SelectedValue 从视图发送到控制器?

这是我的代码:

@using (Html.BeginForm(new {  newvalue=ddl.SelectedValue}))
{

@Html.DropDownList("categories", 
     (List<SelectListItem>)ViewData["categories"], 
      new { onchange = "this.form.submit()", id = "ddl" })
c# asp.net-mvc entity-framework
1个回答
1
投票

请勿使用

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
)实际上为你做什么之前,你不应该使用任何框架。在尝试使用螺丝刀之前先了解螺丝的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.