1

这是我的下拉列表:

                        <div class="editor-label">
    <p>
        <%: Html.LabelFor(model => model.Gov) %>
    </p>
    </div>
    <div class="editor-field">
    <p>
        <%=Html.DropDownListFor(model => model.Gov, ViewBag.gov as SelectList)%>
        <%: Html.ValidationMessageFor(model => model.Gov) %>
    </p>

这是我的视图控制器:

        public ActionResult TestR()
    {
        ViewBag.gov = new SelectList(entity.gouvernerat, "Idgov", "Nomg");
        return View();
    }

使用 HttpPost :

 [HttpPost]
    public ActionResult TestR(LogModel.preRegister Model)
    {
        if (ModelState.IsValid)
        {
            if (LogModel.preRegister.Verifuser(Model.IDag))
            {
                ModelState.AddModelError("", "Agence existe deja");
                return View(Model);
            }
            else
            {
                int ins = LogModel.preRegister.Register(Model);
                if (ins > 0)
                {

                    return View("Index");
                }
                else return View();
            }
        }
        else
        {
            return View();
        }

    }

现在下拉列表显示我的数据库中的政府列表(这就是我想要的),但是当我点击创建时,我的 DropdownLisrt 中出现了这个错误There is no ViewData item of type 'IEnumerable <SelectListItem>' with key 'Gov'.

4

1 回答 1

2

使用 LINQ to SQL 很容易做到这一点。假设您有一个Govs包含“Tunis”、“Ariana”等字符串的表。然后,您可以像这样创建您的选择列表:

govs.Select( x => new SelectListItem { Text = x.Name, Value = x.Name } );

当然,您甚至可以更灵活地将值分配给其他东西,例如 ID。

更新:更多详细信息以回答评论中提出的问题:

在视图模型中添加选择列表项:

public IEnumerable<SelectListItem> GovItems { get; set; }

然后,在控制器中,在返回视图之前:

// database code to get "Govs" table goes here....

var vm = new MyViewModel {
  GovItems = govs.Select( x => new SelectListItem { Text = x.Name, Value = x.Name } );
}

那么在你看来:

@Html.DropDownListFor( x => x.Gov, Model.Govs )

我希望这有帮助。如果您仍然感到困惑,我建议您阅读一些有关 ASP.NET MVC 的教程。我推荐微软官方的一款:

http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part1-cs

于 2012-04-05T00:19:18.610 回答