2012-05-25 32 views
0

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

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

在视图中,用户填写的所有对象A的形式项目。然后,他们有一个选择填写我希望他们能够物体B的项目如果他们想这样做,选择“是”(我使用Jquery在当时显示更多页面)。

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

在我的控制,我要做到以下几点:
*做的东西为对象的
*检查,看看他们是否选择是
*做的东西为对象B

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

TL; DR - 如何在View中创建一个简单的DropdownList,我可以在Controller中访问?

+0

好了 - 我可以使用的Request.Form [ “ddlChoice”];在控制器中,这将工作。这是做这件事的最好方法吗? –

+0

请参阅下面的答案,我觉得如果使用Request.Form属性代替使用强类型类,则会出现更多代码膨胀并且更容易出错。如果你觉得下面的答案有帮助,请标记为答案,有一个好的答案! – likestoski

回答

2

在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; 

} 
0

是你的下拉应该是模型的一部分,否则控制器将不会有来自用户的答案检查,看他们是否选择是

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

我通常使用bool?只是因为我想知道,如果用户选择或其他,但使用bool将被罚款了。