Asp.net mvc 3 Html.DropDownList所选值无法使用ViewBag工作
好吧,在这里读了几个小时的书,尝试了所有的解决方案,但都失败了,我还发现我认为这会拯救我的生命。。。没什么 长话短说 以下是我的观点(所有组合) 这是我的呈现HTML。无处可寻Asp.net mvc 3 Html.DropDownList所选值无法使用ViewBag工作,asp.net-mvc-3,razor,html-select,selectedvalue,Asp.net Mvc 3,Razor,Html Select,Selectedvalue,好吧,在这里读了几个小时的书,尝试了所有的解决方案,但都失败了,我还发现我认为这会拯救我的生命。。。没什么 长话短说 以下是我的观点(所有组合) 这是我的呈现HTML。无处可寻 <select id="yearDropDown" name="yearDropDown"><option value="">ALL YEARS</option> <option value="2007">2007</option> <option val
<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>
视图:
将ViewBag属性的名称更改为与DropDownList的名称不匹配。 使用
ViewBag.yearDropDownDD
而不是ViewBag.yearDropDown
此外,您错误地创建了SelectList。
您需要传递选定的值,而不是数组项:
ViewBag.yearDropDown = new
SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault().Value);
我应该去学习的第一个地方。。。。但我没有 谢谢你的回答。非常感谢。我现在想自杀。读了两个小时的博客,我花了2分钟复制了这个例子,效果非常好
ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault());
最后一个参数是SelectListItem
,但必须选择value
(示例中的字符串)
问题也可能是名称,请参见此处 在控制器中
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();
}
ViewBag.PersonList= new SelectList(db.Person, "Id", "Name", p.PersonId);
在视图中
@Html.DropDownList("PersonList",(SelectList)ViewBag.PersonList )
这将不起作用,您必须更改名称,因此名称不同
@Html.DropDownList("PersonList123",(SelectList)ViewBag.PersonList )
所以,改变你的下拉列表,它将为你工作
致意
Christian Lyck。我知道这是一个老问题,但我将分享另一个解决方案,因为有时您做了正确的事情,但在请求和响应后您无法看到所选的值,因为您的剃须刀可能有错误。在我遇到的这种情况下,您可以使用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();
}
作为控制器的私人功能,我有:
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();
}
private List GetAllData(List selectedData)
{
返回MyGetAll()。选择(x=>
新建SelectListItem
{
Text=x.点,
Value=x.Amount.ToString(),
Selected=selectedPrices.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>
@foreach(列表ViewBag.MyData中的var listItem)
{
@listItem.Text
}
我希望它对类似的问题有用:)如果你看我在视图中的第二个示例,那正是我所做的。也没用。你找到了解决办法。看看我自己的答案。谢谢你的时间和关注。@Tony,解决方案是什么?解决方案是什么?很有趣。。。我没有测试过,但我认为你是对的。我正在归还整个物品。Thankson edit,如何从列出的列表中知道所选的一个(所选的)
<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>