2014-05-23 3 views
-1

Я пытался получить свой идентификатор CompanyProfile в своем UserController , на первом шаге я получу правильный идентификатор, но в [HttpPost] значение ID было изменено на то же значение, что и пользователь ID Это мой контроллерViewbag IsValid false при редактировании/изменении данных

public ActionResult Edit (int id) 
{ 
User user = _db.Users.Find(id); 
if (user == null) 
{ 
return HttpNotFound(); 
} 
ViewBag.CompanyProfile = new SelectList(_db.CompanyProfiles,"ID","NamaProfil", user.CompanyProfile.ID); 
return View(user); 
} 


[HttpPost] 
public ActionResult Edit(User user) 
{ 
if (ModelState.IsValid) 
{ 
_db.Entry(user).State = EntityState.Modified; 
_db.SaveChanges(); 
return RedirectToAction ("Index"); 
} 
return View(user); 
} 

это модель

public int ID {get;set;} 
public virtual CompanyProfile CompanyProfile {get;set;} 

и это выпадающий в окне редактирования

<div class= "controls"> 
@Html.DropDownList("CompanyProfile", null, "--Choose Company--", new {@class="span6 m-wrap"}) 
</div> 

каждый ответ может помочь, спасибо: D

забывает сказать, что это, это сообщение об ошибке Там нет ViewData элемента типа «IEnumerable», который имеет ключ 'CompanyProfile.

ответ

1

У вас есть ряд проблем. Модель, которую вы передаете вашему представлению, имеет свойство с именем CompanyProfile ссылочного типа CompanyProfile. Этот тип не может быть привязан к IEnumerable любого типа - эти две модели просто не совпадают. Ваше свойство модели должно быть типа int, которое должно соответствовать выбранному вами значению, - user.CompanyProfile.ID.

Вторая проблема заключается в том, что вы никогда не должны называть свое свойство модели таким же, как любое значение ViewBag. Снова у вас есть свойство с именем CompanyProfile, и у вас есть ViewBag.CompanyProfile. Те два будут перезаписывать друг друга во время модели связывания ...

Я предлагаю вам сделать следующее: В контроллер привязки списка выбора к ViewBag без определения выбранного значения:

ViewBag.CompanyProfileList = new SelectList(_db.CompanyProfiles,"ID","NamaProfil"); 

Тогда ваш модель должна иметь выбранной компании профиль ID объекта:

public int CompanyProfileId { get; set; } 

А затем связать его с вашей точки зрения, как это:

@Html.DropDownListFor(m => m.CompanyProfileId, (SelectList)ViewBag.CompanyProfileList, "--Choose Company--", new { @class = "span6 m-wrap" }) 
+0

, но если я не определил выбранное значение, мой раскрывающийся список будет равен нулю, и я не смогу сохранить данные – ericthesialie

+0

Если свойство CompanyProfileId имеет значение (скажем, 5), а значение 5 - одно из значений в вашем списке выбора что вы получили от _db.CompanyProfiles, тогда выпадающий список, сгенерированный автоматически, будет по умолчанию выбранным значением. – Marko

Смежные вопросы