MVC4 - 在 DropDownList 中设置最初选择的项目

Posted

技术标签:

【中文标题】MVC4 - 在 DropDownList 中设置最初选择的项目【英文标题】:MVC4 - Setting Initially Selected Item in DropDownList 【发布时间】:2013-08-16 07:46:07 【问题描述】:

我正在通过模型将对象列表传递给我的视图

@model MyModel.ObjectViewModel

我是 MVC 新手,正在尝试在我的视图中设置 dropdownlist 的初始选定项(在编辑后建模)。

然后我将它绑定到一个下拉列表,如下所示

<label for="ddlObjects">Select Object</label>
@html.DropDownList("ddlObjects", Model.AllObjectsSelectList, Model.Object.ObjectName)

上面确实使下拉列表最初选择了正确的对象,但我发现它只是文本形式。未选择真实对象,因此未使用该值。我怎样才能有一个项目列表,比如"Object1" "Object2" 等,并且默认是一个特定的?

当我通过项目时,我只知道项目的文本值(出现在下拉列表中的名称),我不知道它的内部值所以我不能真正使用SelectListItem Text = "X", Value= "Y"

我在这里和通过谷歌搜索过,有设置初始选择值的选项,但是他们使用像 @Html.DropDownList 这样的方法,似乎不允许我指定控件名称,在我的控制器中我具体引用控件的名称。

【问题讨论】:

forums.asp.net/t/1761365.aspx/1 ***.com/questions/16298346/… 这种工作方式是说它应该将默认值设置为 X,但是当我实际运行应用程序并转到页面时,它似乎并没有改变它。 (第二个链接)。 为什么不使用 ViewbagViewData 来携带您选择的 id(value) 来查看并将该值分配给下拉选择的值重载,所以您选择的 id(value) 可能是动态的。 因为我没有ID,所以我只有文本值。我正在处理从 SQL 获得的数据,而不是存储 ID 并使用 Joins 来规范化表,它只是传递对象的字符串名称。 尝试将您的 TextField 和 Valuefield 都作为名称传递 像这样 SelectListItem Text = "X", Value= "X" 【参考方案1】:

我的工作不是很漂亮,但它可以很容易地重构为更好。这只是我目前没有时间做的一些努力的例子——但我会在下周左右。

我在我的控制器中创建了一个方法,我将它传递给我的项目列表(selectList,你认为它无论如何都可以工作......但它没有)然后我找出我需要的对象并设置选择属性为真。

private List<SelectListItem> GetListOfObjectTypes(SelectList selectList, string objectTypeName, string objectTypeId)

    List<SelectListItem> items = new List<SelectListItem>();
    foreach (METAObjectType item in selectList.Items)
    
         bool isSelected = false;
         if (item.Name == objectTypeName)
         
                isSelected = true;
         
         items.Add(new SelectListItem Selected= isSelected, Text=item.Name, Value=item.ObjectTypeId.ToString());
        
        return items;
    

然后我将它传递给我的视图并将其设置为@Html.DropDownList 中的列表,它现在将默认选择正确的项目。

【讨论】:

以上是关于MVC4 - 在 DropDownList 中设置最初选择的项目的主要内容,如果未能解决你的问题,请参考以下文章

在 GridView 中设置 DropDownList 的选定值

Kendo DropdownList 从模型中设置值

可以在 asp.net mvc4 中使用 jquery 在@html.label 中设置值吗?

如何从下拉列表中设置默认值[重复]

数据绑定 DropDownList

HTML.Kendo().Dropdownlist 设置默认项