在MVC 4中创建下拉列表的最佳方法是什么?

8

我想知道,在MVC 4中创建下拉列表的最佳方法是什么?使用ViewBag还是其他方法?


不是 View.Bag,而是 ViewBag。 - Dhaval Marthak
1
我建议您将它们与您的“ViewModel”一起传递。 - Artless
哦,我的视图中有许多下拉列表。我想使用ViewBag创建它们,但不想匆忙行事,也许还有其他比ViewBag更好的方法。 - Elvin Mammadov
在MVC4 Razor中绑定下拉列表 - Sender
1个回答

10

我认为,既然这些项是你的视图中的可变值,它们就应该属于视图模型。视图模型不仅仅是用于从视图中返回的项目。

模型:

public class SomethingModel
{
    public IEnumerable<SelectListItem> DropDownItems { get; set; }
    public String MySelection { get; set; }

    public SomethingModel()
    {
        DropDownItems = new List<SelectListItem>();
    }
}

控制器:

public ActionResult DoSomething()
{
    var model = new SomethingModel();        
    model.DropDownItems.Add(new SelectListItem { Text = "MyText", Value = "1" });
    return View(model)
}

查看:

@Html.DropDownListFor(m => m.MySelection, Model.DropDownItems)

在控制器或其他适合该情况的位置填充这个内容。

另外,为了更加灵活,可以将 public IEnumerable<SelectListItem> 替换为 public IEnumerable<MyCustomClass> 然后执行如下操作:

@Html.DropDownFor(m => m.MySelection,
    new SelectList(Model.DropDownItems, "KeyProperty", "ValueProperty")
在这种情况下,您当然还必须修改控制器操作以使用MyCustomClass的实例填充model.DropDownItems

1
谢谢,@Ant P。在这个例子中我怎么能获取dataValueField? - Elvin Mammadov
我想编写这个新的SelectList(Model.DisplayList, "TestplanId", "Name")。 - Elvin Mammadov
1
@ElvinArzumanoğlu 我添加了一些关于如何实现这一点的信息。 - Ant P
这是一个非常好的例子,我认为这种方法(包括最后一次编辑)适合我。 - Elvin Mammadov
它运行良好。但现在我有另一个问题,我的下拉框没有选择选定项。 - Elvin Mammadov
1
只要第一个参数中的表达式与它应该填充的视图模型属性匹配,并且您将此模型传回到控制器的POST方法中,它就应该工作。如果不是这样,那么这听起来像是一个单独问题的明显问题。 - Ant P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接