【问题标题】:Simple DropDownList in MVC3MVC3 中的简单下拉列表
【发布时间】:2012-05-25 06:06:26
【问题描述】:

正在开发我的第一个 MVC3 应用程序。我有一个简单的视图,它有 2 个对象(对象 A,对象 B)。对象 B 是可选的。我已经创建了一个包含两个对象的模型,并且控制器可以正常工作,将数据来回传递给视图。

我正在尝试放入一个简单的 DropDownList 供用户决定是否要为对象 B 输入数据。下拉列表很简单 - 两个值“是”和“否”。
例如:继续“B”部分?
[是]
[没有]

在视图上,用户填写对象 A 的所有表单项。然后,他们可以选择填写对象 B 的项。如果他们想这样做,我希望他们选择“是”(我当时正在使用 Jquery 来显示更多页面)。

我的问题:如何制作一个简单的下拉列表(甚至是基本的 HTML 输入 type="select"...),以便在他们提交表单后在 Controller 中访问?

在我的控制器中,我想执行以下操作:
* 为对象 A 做事
* 检查他们是否选择了是
* 为对象 B 做事

像“是/否”下拉菜单这样简单的内容是否需要进入模型?它没有输入任何内容 - 它只是用户在视图中做出的决定。我知道必须有一种简单的方法来做到这一点(ViewBag?),但我是新手,显然迷路了。

TL;DR - 如何在可以在控制器中访问的视图上创建简单的 DropdownList?

【问题讨论】:

  • 好的 - 我可以使用 Request.Form["ddlChoice"];在控制器中,这将起作用。这是最好的方法吗?
  • 请在下面查看我的回答,如果您使用 Request.Form 属性而不是使用强类型类,我觉得会有更多代码膨胀并且更容易出错。如果您觉得以下答案有帮助,请标记为答案,祝您好!

标签: c# asp.net-mvc-3


【解决方案1】:

从视图返回对象的 HTTPPOST 中获取值的经验法则是将输入控件的 id 和 name 属性命名为与 Models 属性名称相同。一个简单的方法是使用 Html 助手。

    public class Model
    {
        public Model()
        {
            List<SelectListItem> options = new List<SelectListItem>();
            options.Add(new SelectListItem { Value = true.ToString(), Text = "yes" });
            options.Add(new SelectListItem { Value = false.ToString(), Text = "no" });
            ContinueOptions = options;
        }
        public bool Continue { get; set; }
        public IEnumerable<SelectListItem> ContinueOptions { get; set; }
    }

在你看来:

@Html.DropDownListFor(m => Model.Continue, Model.ContinueOptions)

在您的控制器中:

[HttpPost]
public ActionResult Edit(Model model)
{
    bool continueOn = model.Continue;   

}

【讨论】:

    【解决方案2】:

    是的,您的下拉菜单应该是模型的一部分,否则控制器将无法从用户那里得到答案检查他们是否选择了是

    public SomeViewModel
    {
      public ObjectA A { get; set; }
      public ObjectB B { get; set; }
      public bool? IsBSelected { get; set; }
    }
    

    我通常使用bool? 只是因为我想知道用户是否选择了其他选项,但使用bool 也可以。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 2012-05-29
      • 1970-01-01
      • 2012-09-18
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多