在下面的示例中,我尝试将Asp.Net身份ID中的“ 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; }
}

最佳答案

有很多错误:


您的发布操作接受Application,该属性没有FullName属性。
即使是,您的Bind属性也不包括它。
ViewBag成员不能拥有与要发布的字段同名的选择列表。将其更改为ViewBag.FullNameChoices
过帐的值将是“贷款干事”用户的Id,您将不对其进行任何操作。如果您实际上有一个外键属性,则可以直接发布到该属性,但是您只是依靠EF来创建一个无法访问的隐式属性。在发布操作中,您需要从数据库中查找具有该Id的用户,然后将其ApplicationUser属性设置为该用户。
尽管从技术上来说并没有错,但是拥有代表应用程序调用ApplicationUser的“贷款人员”的属性并不直观。您应该将其更改为类似LoanOfficer的名称。同样,您似乎假设所有时间的所有用户也都是“贷款人员”,您应该通过为贷款人员创建ApplicationUser的子类或使用角色分配该状态来计划一些灵活性。

关于c# - @ Html.Dropdownlist列表未保存到数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27258394/

10-12 21:35