这给我很难实现。我已经生成了一个控制器和视图来处理更新模型。将下拉列表添加到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);
}
我觉得我快到了。但只需要朝正确的方向推动这项工作。
请注意,模型 - 视图 - 控制器标签是关于模式的问题。 ASP.NET-MVC实现有一个特定的标签。 –
副本很好地解释了它:在您的HttpPost操作方法中,如果要再次呈现视图,则必须再次初始化SelectList。第二段的最后一行:_“如果您返回视图,则必须先重新分配CategoryList的值,就像您在GET方法中所做的那样”_“。另外,不要在你的问题中加入关于密切原因的评论,添加评论和@ @通知最近的选民。 – CodeCaster