9

我有这个烦人的问题,我的 DropDownlist 默认不选择当前值。

控制器:

var YearsCycling = new SelectList(new List<SelectListItem>() 
{ 
    new SelectListItem(){ Value="1yr", Text="1yr"},
    new SelectListItem(){ Value="1-3yrs", Text="1-3yrs"}, 
    new SelectListItem(){ Value="3-5yrs", Text="3-5yrs"}, 
    new SelectListItem(){ Value="5-10yrs", Text="5-10yrs"}, 
    new SelectListItem(){ Value="10+yrs", Text="10+yrs"} 
},
"Value",
"Text",
new SelectListItem() { Value = "5-10yrs", Text = "5-10yrs", 
Selected = true });
ViewBag.YearsCycling = YearsCycling;

看法:

<%:Html.DropDownListFor(model=>model.YearsCycling,(SelectList)ViewBag.YearsCycling,"-select-") %>

但不是选择“5-10yrs”,它只显示“-select-”选项,如果我检查 DOM 源,则没有选择任何元素。

更新:我仍然不知道问题是什么,但我现在通过做一些丑陋的事情让它工作:

<%
    var sl = (SelectList)ViewBag.YearsCycling;
%>
<select name="YearsCycling" id="YearsCycling">
<%foreach(var li in sl){  %>
    <option value="<%:li.Value %>" <%if(li.Selected){%>selected="true"<%}%>><%:li.Text %></option>
<%} %>
</select>

这不是最好的解决方案,但是如果您因为一直在拔头发而提出这个问题,那么这应该会有所帮助。

4

8 回答 8

19

我确定您已经超越了这一点,但我刚才被烧毁了,因为我已将下拉列表命名为与视图模型类中的属性相同的名称。

将下拉列表名称更改为其他名称可以立即解决。

于 2013-04-24T22:07:34.123 回答
7

试试这个:

创建一个视图模型:

public class MyViewModel
{
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> YearsCycling { get; set; }
}

控制器:

var YearsCycling = new SelectList(new List<SelectListItem>() 
{ 
    new SelectListItem(){ Value="1yr", Text="1yr"},
    new SelectListItem(){ Value="1-3yrs", Text="1-3yrs"}, 
    new SelectListItem(){ Value="3-5yrs", Text="3-5yrs"}, 
    new SelectListItem(){ Value="5-10yrs", Text="5-10yrs"}, 
    new SelectListItem(){ Value="10+yrs", Text="10+yrs"} 
},
"Value",
"Text");

MyViewModel model = new MyViewModel();
model.YearsCycling = YearsCycling;
model.SelectedValue = "5-10yrs";
return View(model);

看法:

<%:Html.DropDownListFor(model=>model.SelectedValue,(SelectList)Model.YearsCycling) %>
于 2013-01-30T13:21:28.863 回答
5

如果您要像这样呈现您的列表:@Html.DropDownListFor(model => model.EntityID, Model.EntitySelectList)

呈现选择选项时 .NET MVC 将使用的值将与 .NET MVC 的值匹配model.EntityID.ToString()

...它不会选择Model.EntitySelectList.SelectedValue

...或任何EntitySelectList.Item.SelectedValue项目。

... 换句话说,当呈现一个 DropDownListFor列表本身以外的东西时,列表列表项的 SelectedValue 属性将被忽略。

无论设置什么 Model.EntitySelectList.SelectedValue 或 Model.EntitySelectList.Item.SelectedValue,ASP.NET MVC 都不会呈现选择。改为使用model.EntityID

于 2013-10-29T16:56:06.077 回答
3

你的代码应该是。

var YearsCycling = new List<SelectListItem>() 
{ 
    new SelectListItem(){ Value="1yr", Text="1yr"},
    new SelectListItem(){ Value="1-3yrs", Text="1-3yrs"}, 
    new SelectListItem(){ Value="3-5yrs", Text="3-5yrs"}, 
    new SelectListItem(){ Value="5-10yrs", Text="5-10yrs", Selected=true}, 
    new SelectListItem(){ Value="10+yrs", Text="10+yrs"} 
};

ViewBag.YearsCycling = YearsCycling;

您可以改用此重载。

<%:Html.DropDownListFor(model=>model.YearsCycling,ViewBag.YearsCycling as List<SelectListItem>) %>
于 2013-01-30T13:17:04.793 回答
2

绑定下拉列表在 MVC 中非常棘手,这让我很尴尬,您可以在控制器中使用此功能将所有城市列表放入 viewBag

创造

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name");

user.CityID 如果您在编辑中,以便在编辑时选择城市

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name", user.CityID);

在您的视图中,只需执行此操作

     @Html.DropDownList("CityId", "Select")

这是我所知道的最简单的方法......

于 2013-03-20T11:50:14.907 回答
1

使用与 html 元素同名的 ViewBag 时遇到一些问题。

因此,当 SelectList 存储在 ViewBag.EventId 中时,不要为 EventId 使用 DropDownList。

将 ViewBag.EventId 更改为 ViewBag.EventData,它是固定的。

于 2013-12-25T22:32:08.520 回答
1

只需确保在 ViewBag 上设置的变量名称与分配给下拉列表的名称不同 - 即不要这样做:

控制器:

ViewBag.CityId = new SelectList(....)

看法:

@Html.DropDownList("CityId", ...

只需使用不同的 viewbag 变量名称。

当使用相同的 ViewBag 变量名称作为带有下拉列表和列表框的 html 控件名称时,我遇到了问题。

于 2014-12-02T09:50:13.710 回答
1

Html.DropDownListFor 也使用来自POST 请求的值。

因此,如果您在 POST 数据中具有相同的参数,即使您在模型中具有不同的值,MVC 也会使用它。

检查您是否在请求中具有相同的名称并更改它。

于 2015-02-05T15:09:45.100 回答