为多个字段重用相同的下拉列表并使用db值mvc4填充

时间:2013-05-30 20:08:44

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

我在视图上有30个字段的相同下拉列表。有没有办法在视图包中为所有30个使用默认值的相同选择列表,或者我必须有30个单独的视图包项目具有相同的选择列表和默认值?

我将选择列表添加到我的控制器编辑方法中的视图包中:

ViewBag.Pulmonary_01 = new SelectList(PulmonaryList(), "Text", "Value", admission.Pulmonary_01);

这些字段是Pulmonary_01到Pulmonary_30。在我看来,我使用:

@Html.DropDownList("Pulmonary_01", String.Empty)

如果我使用ViewBag.Pulmonary代替_01,则在保存时不匹配。两个障碍匹配一般的“肺”视图和所有字段,因此它们保存,另一个具有所选值。我没有办法避免使用30个ViewBags。

1 个答案:

答案 0 :(得分:1)

这根本不是问题。您可以根据需要多次使用相同的视图包,只需将ViewBag转换为SelectList即可。例如,如果你有一个类似的模型:

public class Pulmonary
{
    public int Pulmonary_01 { get; set; }
    public int Pulmonary_02 { get; set; }
    public int Pulmonary_03 { get; set; }

并在您的操作中创建一个这样的视图包:

 ViewBag.Pulmonaries = new SelectList(PulmonaryList(), "Text", "Value");

您应该可以在视图中执行以下操作:

 @model PulmonaryClassFullNamespace.Pulmonary
 // Form declaration
 @HtmlDropDownListFor(model => Model.Pulmonary_01, (SelectList)ViewBag.Pulmonaries)
 @HtmlDropDownListFor(model => Model.Pulmonary_02, (SelectList)ViewBag.Pulmonaries)
 //.....
 // Form closure

您唯一需要注意的是ViewBag属性名称与任何模型属性名称都不匹配。例如,如果您命名ViewBag.Pulmonary_01并且您有一个名为Pulmonary_01的模型属性,那么这将导致映射问题,因为这些值将在表单集合中相互覆盖。