5

好吧,在这里阅读了几个小时后,尝试了所有解决方案均未成功,还发现了这篇文章,我认为它可以挽救我的生命……什么也没有。

长话短说。

这是我的观点(所有组合)

@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")
4

5 回答 5

22

问题也可能是名称,请参见此处。

在控制器中

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

在视图中

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

这行不通,你得改名字,所以就不一样了。

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

所以改变 yearDropDown 它会为你工作。

最好的问候克里斯蒂安·莱克。

于 2013-11-03T00:54:03.150 回答
2
ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault());

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

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

于 2013-03-28T16:28:33.683 回答
1

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

我希望它对类似的问题有用:)

于 2016-07-18T05:26:22.527 回答
0

将 ViewBag 属性的名称更改为与 DropDownList 的名称不匹配。使用ViewBag.yearDropDownDD而不是ViewBag.yearDropDown.

另外,您错误地创建了 SelectList。您需要传递选定的值而不是数组项:

ViewBag.yearDropDown = new
SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault().Value);
于 2013-03-28T16:05:55.457 回答
-1

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

这是我的解决方案

谢谢你的回答。真的很感激。我现在想自己开枪。两个小时阅读博客,我花了 2 分钟来复制这个例子并完美地工作......

于 2013-03-28T16:11:01.290 回答