如何使我的SelectListItem重载将“Value”属性设置为与“Text”属性相同?

时间:2014-06-03 21:32:43

标签: asp.net-mvc-3 razor

我试着在我看来做这样的事情:

 @{
     string selectgedOne = ViewBag.sellectedvalue;
 }

      @Html.DropDownListFor(x => x.Category, Model.Categories.Select(x => new SelectListItem { Text = x.ToString(), Value = x.ToString(), Selected = x.ToString().Equals(selectgedOne.ToString()) }))

但是回归的是......

 System.Web.Mvc.SelectListItem

我在使用这个版本时有点成功...

 @Html.DropDownListFor(x => x.Category, Model.Categories, selectgedOne)

...这里它设置了列表框中的值,但是当我在页面框中我看到第一个选项值没有设置为与文本相同...

  <select id="Category" name="Category">
  <option value="">Tests</option>
  <option value="In class participation">In class participation</option>
  <option value="Homework">Homework</option>
  <option value="Projects">Projects</option>
  <option value="Tests">Tests</option>
  <option value="Other">Other</option>
  </select>

...所以,如果我将其发布到控制器,则分类将是一个空字符串。

如何让我的SelectListItem重载将“Value”属性设置为与“Text”属性相同?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我在列表顶部发送了我想要的值(assignCategory),然后......

  public ActionResult Categories(int? id, int? department, String assignCategory)
    {
        var categories = new List<SelectListItem>();               
        for (int i = 0; i < rubricsList.Count(); i++)
        {
            categories.Add(new SelectListItem
            {
                Text = rubricsList[i],
                Value = rubricsList[i],
                Selected = true
            });
        }
        switch (assignCategory)
        {
            case "A":
                categories.Insert(0, new SelectListItem
                {
                    Text = rubricsList[0],
                    Value = rubricsList[0],
                    Selected = true
                });
                break;
    // More cases here
 }

返回视图是部分的,只有一行,如下所示:

 @Html.DropDownListFor(x => x.Category,  Model.Categories)

现在,下拉列表中的第一个值已设置,可以正确提交