Html.DropDownList选定值使用ViewBag不工作(Html.DropDownList

2019-08-18 03:56发布

好了,几个小时阅读的东西在这里,失败尝试所有的解决方案之后,还发现这篇文章 ,我认为它会救我的命...什么都没有。

长话短说。

这是我的看法(所有组合)

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

不用说,但我会的,我检查了我的收藏和的SelectList实际上有填充传递给控制器​​选择一年SelectedValue属性。 但是,当我呈现在视图,它进入第一个选项。

拜托,我需要的解决方案为DropDownList ,而不是DropDownListFor 。 我强调这一点,因为我在这里看到的其他人询问同样的帮助和一堆人给他们的指示,几乎命令他们,用DropDownListFor。 还有一个原因是我需要使用的DropDownList。

解决方法:查看我自己的答案。 然而,这里是我做了简单的修改。

控制器:

ViewBag.yearDropDown = years;

视图:

@Html.DropDownList("yearDropDown")

Answer 1:

这个问题也可能是名,在这里看到。

在控制器

ViewBag.PersonList= new SelectList(db.Person, "Id", "Name", p.PersonId); 

在查看

@Html.DropDownList("PersonList",(SelectList)ViewBag.PersonList )

这将无法正常工作,您必须更改名称,所以它是不一样的。

@Html.DropDownList("PersonList123",(SelectList)ViewBag.PersonList )

因此,改变yearDropDown,它会为你工作。

最好的问候基督教Lyck。



Answer 2:

ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault());

这里最后一个参数是SelectListItem ,但必须选择value (在您的示例字符串)

的SelectList构造函数(IEnumerable的,字符串,字符串,对象)



Answer 3:

我知道它的一个老问题,但我将分享另一种解决方案,因为有时你必须正确地做任何事,但你不能看到一个请求和响应后,所选择的价值,因为你的剃须刀有错误可能。 在这种情况下,我已经有,你可以使用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>

我希望这将是对类似问题有用:)



Answer 4:

更改ViewBag属性的名称不匹配的DropDownList的名称。 使用ViewBag.yearDropDownDD代替ViewBag.yearDropDown

此外,您错误地创建的SelectList。 您需要将选定的值不是数组项:

ViewBag.yearDropDown = new
SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault().Value);


Answer 5:

第一个地方我应该去学习....,我没有。

这里是我的解决办法

谢谢你对你的答案。 真的很感激。 我觉得现在我拍摄自己的脚。 两个小时阅读博客和我花了2分钟,重复这个例子和工作完美...



文章来源: Html.DropDownList selected value not working using ViewBag