MVC3中的简单DropDownList

处理我的第一个MVC3应用程序。我有一个简单的视图,有2个对象(对象A,对象B)。对象B是可选的。我用这两个对象创建了一个模型,并让Controller正常工作,将数据来回传递给View。

I'm trying to put in a simple DropDownList for the user to decide whether they want to enter data for object B. The dropdown list is simple - two values "Yes" and "No".
Ex: Continue with Part "B"?
[Yes]
[No]

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

我的问题:我如何制作一个简单的Dropdownlist(或者甚至是基本的HTML输入类型=“select”...),以便在他们提交表单后可以在Controller中访问?

In my Controller, I want to do the following:
* Do stuff for object A
* Check to see if they selected Yes
* Do stuff for object B

像Yes/No下拉菜单这样简单的事情需要进入模型吗?它没有输入任何内容 - 只是用户在View中做出的决定。我知道必须有一个简单的方法来执行此操作(ViewBag?),但我是新的,显然已经丢失。

TL; DR - 如何在View中创建一个简单的DropdownList,以便在控制器中访问?

0
额外 编辑
意见: 1
好的 - 我可以使用Request.Form [“ddlChoice”];在控制器中,这将工作。这是做这件事的最好方法吗?
额外 作者 Mike Smith,
请参阅下面的答案,如果您使用Request.Form属性而不是使用强类型类,则感觉存在更多的代码膨胀并且更容易出错。如果你觉得下面的答案有帮助,请标记为答案,有一个好的答案!
额外 作者 likestoski,

2 答案

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

    public class Model
    {
        public Model()
        {
            List options = new List();
            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 ContinueOptions { get; set; }
    }

在你的View中:

@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 也可以。

0
额外