メモリ内のデータからDropDownListを取り込み、POSTにこのエラーが発生しています。'Position'キーを持つViewDataアイテムは 'System.String'タイプですが、 'IEnumerable <SelectListItem>'タイプである必要があります
キー 'Position'を持つViewDataアイテムは 'System.String'タイプですが、 'IEnumerable'タイプである必要があります。
モデル:
public class StaffModel
{
public int id { get; set; }
public string Email { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.Password)]
public string PasswordConfirm { get; set; }
public string Emp_Name { get; set; }
public string Emp_Address { get; set; }
public string Phone { get; set; }
public string Position { get; set; }
public List<SelectListItem> Positions { set; get; }
}
コントローラー:
public ActionResult Register()
{
IEnumerable<SelectListItem> position = db.Positions.Select(p => new SelectListItem
{
Text = p.Position_Title,
Value = p.Position_ID.ToString()
});
ViewBag.Position = position;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(StaffModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
Employee em = new Employee
{
Employee_Name = model.Emp_Name,
Address = model.Emp_Address,
Phone = model.Phone,
Position_ID = Convert.ToInt32(db.Positions.Where(p => p.Position_Title == model.Position).Select(p => p.Position_ID)),
};
db.Employees.Add(em);
db.SaveChanges();
return RedirectToAction("Index", "Employees");
}
}
return View(model);
}
enter code here
HTML /レイザー:
<div class="form-group">
@Html.LabelFor(model => model.Position, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Position",null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Position, "", new { @class = "text-danger" })
</div>
</div>
、私はこれがポストで起こっていることを踏みにじりました。 'HttpGet'と' HttpPost'アクションメソッドの 'ViewBag.Position'を宣言しなければなりません。おそらく' if'ステートメントの上にあります。 –
あなたの.Whereステートメント.. p.Position_Title'は、 'model.Position'がドロップダウンリストの** value **になるので決して' model.Position'と同じでなければなりません..テキストではありませんので、基本的に '.Where(p =>) p.Position_Title == p.Position_ID.ToString()) ' –
@BviLLe_Kidどうすれば修正できますか? – bao4461826