这让我很难实施。我已经生成了一个控制器和视图来处理更新模型。
但是在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);
}
我觉得我快到了。但只需要朝着正确的方向努力就可以实现这一目标。
答案 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())