无法让我的下拉列表显示在我的视图中

时间:2012-12-27 18:27:36

标签: asp.net-mvc-3

我基本上是在我的数据输入视图上显示一个下拉列表,下拉列表一直给我错误“表达式树可能不包含动态操作”。我已将“@Model MyModel”添加到我的视图顶部,但仍然无法通过此错误。有谁知道如何解决这个问题?我有一个看起来像这样的控制器

using MvcApplication1.Models;


namespace MvcApplication1.Controllers
{
    public class MyController : Controller
    {

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult EnterInfo()
        {
            GetUT myGetUT = new GetUT();
            ViewBag.uts = GetOptions();
            return View(myGetUT);
        }

        [HttpPost]
        public ActionResult EnterInfo(GetUT myGetUT)
        {
            ViewBag.uts = GetOptions();
            return View(myGetUT);
        }

        private List<UT> GetOptions()
        {
            List<UT> uts = new List<UT>();
            uts.Add(new UT() { ID = 1, Name = "1st" });
            uts.Add(new UT() { ID = 2, Name = "2nd" });
            uts.Add(new UT() { ID = 3, Name = "3rd" });
            uts.Add(new UT() { ID = 4, Name = "4th" });

            return uts;
        }

    }
}

和一个看起来像

的视图
@Model MyModel

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>EnterInfo</title>
</head>
<body>
    <div>

        @Html.DropDownListFor(x => x.UTID, new SelectList(ViewBag.uts, "ID", "Name", Model.UTID))
        Enter an Amount :-<input type="text" name="Amount" /><br />
        <input type="submit" value="Submit Info" />

    </div>
</body>
</html>

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

嗯,ViewBag是一种动态类型,所以我认为这就是它所抱怨的。尝试将public List<UT> UTs { get; set; }作为MyModel上的属性并更改您的帮助程序以使用模型中的UTs属性。像这样:

控制器:

public ActionResult EnterInfo()
{
    GetUT myGetUT = new GetUT();
    myGetUT.UTs = GetOptions();
    return View(myGetUT);
}

查看:

@Html.DropDownListFor(x => x.UTID, 
    new SelectList(Model.UTs, "ID", "Name", Model.UTID))`

编辑:如果不明显,你的视图应该键入GetUT类型(因为这是你在EnterInfo动作中传递给View()函数的东西) - 我认为你说的是​​你的意思@Model MyModel。如果没有,请将其更改为@Model GetUT并将该属性设置为GetUT类。