0

我在一个视图中有 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。

4

1 回答 1

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 的模型属性,那么这将导致映射问题,因为这些值将在表单集合中相互覆盖。

于 2013-05-30T21:16:52.033 回答