将下拉列表添加到mvc页面

时间:2016-07-25 20:00:41

标签: c# asp.net-mvc

这让我很难实施。我已经生成了一个控制器和视图来处理更新模型。

但是在Create.cshtml中,我需要向数据库用户添加一个下拉列表(使用db.Users.Tolist())来填充下拉列表。

<div class="form-group">
    @Html.LabelFor(model => model.UserId, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        // @Html.EditorFor(model => model.UserId, new { htmlAttributes = new { @class = "form-control" } })
        @Html.DropDownListFor(model => model.UserId, ViewData["u"] as IEnumerable<SelectListItem>)
    </div>
</div>

所以我采用@Html.EditorFor()并将其替换为@Html.DropDownListFor()以显示下拉列表。这确实有效,但是当我点击提交时出现错误。

  

具有键'UserId'的ViewData项的类型为'System.String',但必须是'IEnumerable'类型。

这是模型。

public class pdf
{
    [Key]
    public int ID { get; set; }
    public string UserId { get; set; }
    public Guid FileGuid { get; set; }
    public string FileName { get; set; }
    public string FileLocation { get; set; }
}

创建控制器。

public ActionResult Create()
{
    if (ModelState.IsValid)
    {
        var u = db.Users.Select(x => new { UserId = x.Id, UserName = x.UserName }).ToList();
        //u[0].UserName
        ViewBag.userinfo = new System.Web.Mvc.MultiSelectList(u, "UserId", "UserName");
        IEnumerable<SelectListItem> u1 = new SelectList(db.Users.ToList(), "Id", "UserName");
        ViewData["u"] = u1;
    }
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,UserId,FileGuid,FileName,FileLocation")] pdf pdf)
{
    if (ModelState.IsValid)
    {
        db.tblPDF.Add(pdf);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(pdf);
}

我觉得我快到了。但只需要朝着正确的方向努力就可以实现这一目标。

2 个答案:

答案 0 :(得分:1)

这就是你如何制作你的SelectListItems

ViewData["items"] = db.UserProfiles
    .Select(x => new SelectListItem() { Text = x.UserName, Value = x.UserId.ToString() });

这就是你如何使用它

@Html.DropDownListFor(model => model.UserId, ViewData["items"] as IEnumerable<SelectListItem>)

答案 1 :(得分:0)

我从未尝试将selectlistitem集合直接传递给页面。我通常将列表添加到模型中,然后使用剃刀创建一个新的selectlistitem集合。

您可以选择修改模型吗?

@Html.DropDownListFor(model => model.UserId, Model.availableUsers.Select(user => new SelectListItem() { Text = user.displayVariable, Value = user.userId, Selected = user.userId == model.UserId }).ToArray())