2014-12-02 2 views
1

В приведенном ниже примере я пытаюсь сохранить идентификатор из таблицы Asp.Net Identity, таблицы aspnetusers «Id» в таблицу «Приложение». Выпадающий список «fullname» заполняется, но не сохраняется в моей таблице «приложение» при отправке приложения. Мне нужно «Id» из таблицы aspnetusers, которая будет сохранена в моей таблице «приложение» после отправки приложения. Помощь будет принята с благодарностью!@ Html.Dropdownlist список не сохраняется в базе данных

Контроллер:

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; } 
} 

ответ

5

Много вещей неправильно:

  1. Ваше сообщение действие принимает Application, которые не имеют FullName свойство.
  2. Даже если это произошло, ваш атрибут Bind не включил его.
  3. У вас не может быть члена ViewBag, который держит выбранный вами список с тем же именем, что и поле, которое вы пытаетесь опубликовать. Измените его на что-то вроде ViewBag.FullNameChoices.
  4. Выведенное значение будет Id пользователя «кредитного офицера», и вы ничего не делаете с ним. Если у вас действительно есть свойство внешнего ключа, вы можете публиковать его напрямую, но вместо этого вы просто полагаетесь на EF, чтобы создать неявное свойство, к которому у вас нет доступа. В своем post action вам нужно будет найти пользователя с этим Id из базы данных, а затем установить для себя свойство ApplicationUser.
  5. В то время как технически не неправильный, имеющий свойство, которое представляет «кредитного офицера» для заявки на вызов ApplicationUser, не является интуитивным. Вы должны изменить его на что-то вроде LoanOfficer. Кроме того, похоже, что вы предполагаете, что все пользователи на все времена будут также «кредитными сотрудниками», вам, вероятно, следует планировать некоторую гибкость, создав подкласс ApplicationUser для сотрудника по кредиту или использовать роли для присвоения этого статуса.
+0

Привет, Крис, спасибо за отзыв. Я обновил свой код, чтобы отразить изменения, предложенные в шагах 1-3. В моем случае для шагов 4 и 5 я использую таблицу ASP.NET Identity «aspnetusers» для полного имени и идентификатора кредитного сотрудника. Моя цель состоит в том, что когда пользователь регистрируется, его/ее полное имя заполняется в раскрывающемся списке на домашней странице приложения. Эта часть работает, но свойства Id и FullName по-прежнему не сохраняются в приложении. Надеюсь, это имеет смысл. – dc922

+0

Вы добавили свойство «FullName» и включили его в связывание, но затем вы отправили и изменили имя своего поля на «FullNameList», так что вы по-прежнему нарушаете точку 3, и теперь ваша публикация «FullNameList», которая не является собственностью на «Приложение» или включено в связывание (точки 1 и 2). Используйте 'Html.DropDownListFor (m => m.FullName, (SelectList) ViewBag.FullNameList, «Select Loan Officer») ' –

+0

Интересно, что теперь« FullName »в моей таблице приложений заполняется хэшированным значением, а ApplicationUser_Id, который был заполнен как мой внешний ключ по-прежнему пуст. – dc922

0

Вы собираетесь добавить [HttpPost]?

Кроме того, ваш DropDownList может быть:

@Html.DropDownList("FullName", ViewBag.FullName, "Select Loan Officer") 
Смежные вопросы