これは実装に苦労しています。私はモデルを更新するためのコントローラとビューを生成しました。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);
}
私はほとんどそこにいると感じます。しかし、この作業をするためには正しい方向へのプッシュが必要です。
model-view-controllerタグはパターンについての質問です。 ASP.NET-MVCの実装には特定のタグがあります。 –
重複は非常にうまく説明します。HttpPostアクションメソッドでは、ビューを再度レンダリングする場合は、SelectListを再度初期化する必要があります。 2番目の段落の最後の行:_ "ビューを返す場合は、GETメソッド" _ "で行ったのと同じように、まずCategoryListの値を再割り当てする必要があります。また、あなたの質問の中の終わりの理由についてのコメントを追加したり、コメントを追加したり、close-voterに '@ notify'したりしないでください。 – CodeCaster