我有这个烦人的问题,我的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-") %>
但不是选择&#34; 5-10岁&#34;而是显示&#34; -select - &#34;选项,如果我检查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>
这不是最好的解决方案,但是如果你因为你已经把头发拉出来而来到这个问题,这应该会有所帮助。
答案 0 :(得分:19)
我确定你已经超越了这个,但我刚才被烧毁了,因为我将下拉列表命名为视图模型类中的属性。
将下拉列表名称更改为其他内容即可将其修复。
答案 1 :(得分:7)
试试这个:
创建一个viewmodel:
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) %>
答案 2 :(得分:5)
如果您按照以下方式呈现列表:@Html.DropDownListFor(model => model.EntityID, Model.EntitySelectList)
.NET MVC在渲染选择选项时将使用的值将与model.EntityID.ToString()
的值匹配。
...它不会选择Model.EntitySelectList.SelectedValue
...或任何EntitySelectList.Item.SelectedValue
项。
...换句话说,当渲染DropDownListFor list本身以外的东西时, List 和 List Items <的SelectedValue属性/ strong>被忽略。
无论设置什么Model.EntitySelectList.SelectedValue或Model.EntitySelectList.Item.SelectedValue,ASP.NET MVC都不会呈现选择。请改用model.EntityID
。
答案 3 :(得分: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>) %>
答案 4 :(得分: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")
这是我所知道的最简单的方式......
答案 5 :(得分:1)
使用与html-element同名的ViewBag时遇到一些问题。
因此,当SelectList存储在ViewBag.EventId中时,不会对EventId使用DropDownList。
将ViewBag.EventId更改为ViewBag.EventData,并且已修复。
答案 6 :(得分:1)
确保ViewBag上设置的变量名称与分配给下拉列表的名称不同 - 即不要这样做:
控制器:
ViewBag.CityId = new SelectList(....)
查看:
@ Html.DropDownList(“CityId”,...
只需使用不同的viewbag变量名称。
当使用相同的ViewBag变量名作为带有下拉列表和列表框的html控件名称时,我遇到了问题。
答案 7 :(得分:1)
Html.DropDownListFor也使用 POST请求中的值。
因此,如果POST数据中有相同的参数,即使模型中的值不同,MVC也会使用它。
检查请求中是否有相同的名称并进行更改。