Asp.net mvc 3 Html.DropDownList所选值无法使用ViewBag工作

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

好吧,在这里读了几个小时的书,尝试了所有的解决方案,但都失败了,我还发现我认为这会拯救我的生命。。。没什么

长话短说

以下是我的观点(所有组合)

这是我的呈现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>
视图:


将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>