Asp.net mvc 3 DropDownListFor不';不显示所选项目

Asp.net mvc 3 DropDownListFor不';不显示所选项目,asp.net-mvc-3,razor,html.dropdownlistfor,Asp.net Mvc 3,Razor,Html.dropdownlistfor,我试图让下拉列表在有项目时选择我的项目,但它从来没有这样做。我在谷歌上搜索了这个,并尝试了许多不同的方法,但它们似乎都使用了包含列表的ViewModel,而不是ViewBag,但如果可能的话,我想继续使用ViewBag 我的控制器: [HttpGet] public ActionResult Index(int? id) { ViewBag.SelectList = new SelectList(rep.GetItemList(), "id", "type

我试图让下拉列表在有项目时选择我的项目,但它从来没有这样做。我在谷歌上搜索了这个,并尝试了许多不同的方法,但它们似乎都使用了包含列表的ViewModel,而不是ViewBag,但如果可能的话,我想继续使用ViewBag

我的控制器:

    [HttpGet]
    public ActionResult Index(int? id)
    {
        ViewBag.SelectList = new SelectList(rep.GetItemList(), "id", "type");
        if (id.HasValue)
        {
            var model = rep.GetItemByID(id.Value);
            if ( model != null )
            {
                return View(model);
            }
        }
        return View();
    }
我的看法是:

    <div class="editor-field">
        @Html.DropDownListFor(model => model.itemID, (SelectList)ViewBag.SelectList)
        @Html.ValidationMessageFor(model => model.itemID)
    </div>

@Html.DropDownListFor(model=>model.itemID,(SelectList)ViewBag.SelectList)
@Html.ValidationMessageFor(model=>model.itemID)
这没有在DropDownList中选择我的项目,我还尝试在ViewBag中创建一个列表,然后在视图中构建SelectList,一些帖子说这应该可以解决问题:

    <div class="editor-field">
        @Html.DropDownListFor(model => model.itemID, new SelectList(ViewBag.SelectList, "id", "type", Model.itemID))
        @Html.ValidationMessageFor(model => model.itemID)
    </div>

@DropDownListFor(model=>model.itemID,新的SelectList(ViewBag.SelectList,“id”,“type”,model.itemID))
@Html.ValidationMessageFor(model=>model.itemID)

但这一切似乎都不起作用。所以我想知道是否有人能够发现我做错了什么?

确保在传递给视图的模型中设置了
itemID
属性

if (id.HasValue)
        {
            var model = rep.GetItemByID(id.Value);
            model.itemID=id.Value;
            return View(model);
        }

我会尝试从一开始就设置所选的值,因为SelectList是不可变的

  [HttpGet]
        public ActionResult Index(int? id)
        {
            if (id.HasValue)
            {
                ViewBag.SelectList = new SelectList(rep.GetItemList(), "id", "type", id );
                var model = rep.GetItemByID(id.Value);
                if ( model != null )
                {
                    return View(model);
                }
            }
            else
            {
                ViewBag.SelectList = new SelectList(rep.GetItemList(), "id", "type");
            }
            return View();
        }
在您看来,可以这样使用它:

@Html.DropDownListFor(model => model.itemID, (SelectList)ViewBag.SelectList, "Please select...")

当我从rep.GetItemByID(id.Value)获取模型时;始终设置itemID。但另一方面,这确实向我指出,我需要确保用于该项目的id返回一个项目。我的问题还没有解决。