@Html.下拉列表列表未保存到数据库

本文关键字:数据库 保存 下拉列表 列表 @Html | 更新日期: 2023-09-27 18:32:48

在下面的示例中,我尝试将 Id 从 Asp.Net 标识"aspnetusers"表"Id"列保存到我的"应用程序"表中。"全名"下拉列表会填充,但在我提交申请时不会保存到我的"申请"表中。提交应用程序后,我需要将 aspnetusers 表中的"Id"保存到我的"应用程序"表中。帮助将不胜感激!

控制器:

private ApplicationDbContext db = new ApplicationDbContext();
public ActionResult Index()
{
    ViewBag.FullNameList = new SelectList(db.Users,"Id","FullName");
    return View();
}
// POST: Applications/Create
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Include = "Id,FullName, FirstName,MiddleInitial,LastName,")]   Application application)
{
    if (ModelState.IsValid)
    {
        ViewBag.FullNameList = new SelectList(db.Users, "Id", "FullName", application.ApplicationUser);
        db.Applications.Add(application);
        db.SaveChanges();
        return RedirectToAction("Thanks");
    }
}

视图:

<p>
      @Html.DropDownListFor(m => m.FullName, (SelectList)ViewBag.FullNameList, "Select Loan Officer")
</p>

型:

public class Application
{
    public int ApplicationId { get; set; }
    [Required]
    [DisplayName("First Name")]
    public string FirstName { get; set; }
    [DisplayName("Middle Initial")]
    public string MiddleInitial { get; set; }
    [Required]
    [DisplayName("Last Name")]
    public string LastName { get; set; }
    public virtual string FullName {get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}   

@Html.下拉列表列表未保存到数据库

很多事情都错了:

  1. 您的发布操作接受Application ,它没有FullName属性。
  2. 即使包含,您的Bind属性也不会包含它。
  3. 您不能让ViewBag成员持有与您尝试发布的字段同名的选择列表。 将其更改为类似 ViewBag.FullNameChoices .
  4. 发布的值将是"信贷员"用户的Id,您没有对其进行任何操作。如果实际上有一个外键属性,则可以直接发布到该属性,但你只是依靠 EF 来创建你无权访问的隐式属性。在发布操作中,您需要从数据库中查找使用该Id的用户,然后将ApplicationUser属性设置为该属性。
  5. 虽然在技术上没有,但拥有一个代表应用程序调用ApplicationUser"信贷员"的属性并不直观。您应该将其更改为类似 LoanOfficer .此外,看起来您假设所有用户也将是"信贷员",您可能应该通过为信贷员创建ApplicationUser子类或使用角色来分配该状态来规划一些灵活性。

你忘了加[HttpPost]吗?

此外,您的DropDownList可能是:

@Html.DropDownList("FullName", ViewBag.FullName, "Select Loan Officer")