好吧,经过几个小时阅读这里的东西,尝试所有的解决方案失败,也发现this article,我认为它会挽救我的生命......没有。
长话短说。
这是我的观点(所有组合)
@Html.DropDownList("yearDropDown",(IEnumerable<SelectListItem>)ViewBag.yearDropDown)
@Html.DropDownList("yearDropDownxxx",(IEnumerable<SelectListItem>)ViewBag.yearDropDown)
@Html.DropDownList("yearDropDown",(<SelectList>)ViewBag.yearDropDown)
@Html.DropDownList("yearDropDown")
这是我的控制器
public ActionResult(int year)
{
var years = new int[] { 2007, 2008, 2009, 2010, 2011, 2012 }
.Select(x => new SelectListItem {
Text = x.ToString(),
Value = x.ToString(),
Selected=x==year }).Distinct().ToList();
years.Insert(0, new SelectListItem { Value = null, Text = "ALL YEARS" });
ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault());
return View();
}
这是我呈现的HTML。选择无处可寻。
<select id="yearDropDown" name="yearDropDown"><option value="">ALL YEARS</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
毋庸置疑,但我会,我在我的Watch中检查并且SelectList实际上具有SelectedValue属性,其中填充了传递给控制器的选定年份。但是当我在视图中渲染时,它会转到第一个选项。
请,我需要DropDownList
的解决方案,而不是DropDownListFor
。我正在强调这一点,因为我看到其他人在这里寻求相同的帮助,一群人给了他们指示,几乎订购它们,使用DropDownListFor。有一个原因我需要使用DropDownList。
解: 看看我自己的答案。 但是,这是我所做的简单修改。
控制器:
ViewBag.yearDropDown = years;
查看:
@Html.DropDownList("yearDropDown")
答案 0 :(得分:19)
问题也可能是名称,请参见此处。
在控制器
中ViewBag.PersonList= new SelectList(db.Person, "Id", "Name", p.PersonId);
在视图中
@Html.DropDownList("PersonList",(SelectList)ViewBag.PersonList )
这不起作用,你必须更改名称,所以它不一样。
@Html.DropDownList("PersonList123",(SelectList)ViewBag.PersonList )
所以改变yearDropDown它会对你有用。
祝你好运 Christian Lyck。
答案 1 :(得分:2)
ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault());
此处的最后一个参数是SelectListItem
,但必须选择value
(示例中为字符串)
SelectList Constructor (IEnumerable, String, String, Object)
答案 2 :(得分:1)
我知道这是一个老问题,但我会分享另一个解决方案,因为有时候你做了一些正确的事情,但是在请求和响应之后你看不到所选的值,因为你的剃刀可能有bug。在我已经拥有的这种情况下,您可以使用viewbag来选择选项:
在控制器中我有:
ViewBag.MyData = GetAllData(strSelected);
...
作为控制器中的私人功能,我有:
private List<SelectListItem> GetAllData(List<string> selectedData)
{
return MyGetAll().Select(x =>
new SelectListItem
{
Text = x.Point,
Value = x.Amount.ToString(),
Selected = selectedPrizes.Contains(x.Amount.ToString())
})
.ToList();
}
在.cshtml中,我有:
<select id="Amount" name="Amount" multiple="multiple">
@foreach (var listItem in (List<SelectListItem>)ViewBag.MyData)
{
<option value="@listItem.Value" @(listItem.Selected ? "selected" : "")>
@listItem .Text
</option>
}
</select>
我希望它对类似的问题有用:)
答案 3 :(得分:0)
将ViewBag属性的名称更改为与DropDownList的名称不匹配。
使用ViewBag.yearDropDownDD
代替ViewBag.yearDropDown
。
另外,您正在错误地创建SelectList。 您需要传递所选值而不是数组项:
ViewBag.yearDropDown = new
SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault().Value);
答案 4 :(得分:-2)
我应该去学习的第一个地方......我没有。
谢谢你的回答。真的很感激。我觉得现在要自己拍脚了。两个小时阅读博客,我花了2分钟复制这个例子并且工作得很好......