Во-первых, извините за повторение темы, которая уже много раз обсуждалась на этом сайте. Как бы я ни старался, я просто не могу заставить свой код работать.
У меня есть следующие классы моделей:
public class ProjectsTable {
public int ID {get; set;}
public String ProjectName {get; set;}
...
public virtual Manager Manager_Id {get; set;} // Stores foreign key of Manager
}
public class Manager {
public int ID {get; set;}
public String ManagerName {get; set;}
...
public virtual ICollection<ProjectsTable> Projects {get; set;}
}
Класс контроллера ProjectsTable содержит следующий метод, дублирующий страницу отображения и редактирования:
private SynthContext db = new SynthContext();
...
// GET: /ProjectsTable/Parameters/5
public ActionResult Parameters(int id) {
ProjectsTable projectstable = db.ProjectsTable.Find(id);
ViewBag.Manager_Id = new SelectList(db.Manager, "ID", "ManagerName");
return View(projectstable);
}
// POST: /ProjectsTable/Parameters/5
public ActionResult Parameters(ProjectsTable projectstable) {
if(ModelState.IsValid) {
db.Entry(projectstable).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Parameters");
}
ViewBag.Manager_Id = new SelectList(db.Manager, "ID", "ManagerName");
return View(projectstable);
}
Наконец, Parameters.cshtml содержит следующий код для отображения раскрывающегося списка.
@model Synth.Models.ProjectsTable
...
<fieldset>
...
<div class="editor-lable">
@Html.LabelFor(model => model.Manager_ID)
</div>
<div class="editor-field">
@HTML.DropDownList("Manager_ID", String.Empty)
</div>
<input type="submit" value="Update">
</fieldset>
Когда я тестирую код, я могу без проблем перейти к /ProjectsTable/Parameters/x
; правильно создан раскрывающийся список, содержащий список имен менеджеров. Однако, когда я нажимаю кнопку «Обновить», идентификатор Manager_ID выделяется красным, указывая на то, что изменение не было зарегистрировано. Я могу подтвердить, что изменения не были зарегистрированы, перейдя к /ProjectsTable/list
, где я обнаружил, что никакие изменения не вступили в силу.
Я попытался добавить @Html.ValidationMessageFor(Model.Manager_ID)
, результат всегда "Значение "x" недопустимо", где x - допустимое значение идентификатора (я проверил его по базе данных).
Я просмотрел сгенерированный источник HTML и не вижу там ничего плохого.
У меня есть подозрение, что мне нужно заменить @HTML.DropDownList
на @HTML.DropDownListFor
, но я не могу понять, какие параметры ему нужны, чтобы он заработал. РЕДАКТИРОВАТЬ. Теперь мне удалось заставить DropDownListFor
работать, но проблема не устранена. Связанный с этим вопрос, который поможет мне решить эту проблему, может заключаться в том, как просмотреть данные публикации, отправленные обратно на сервер.
Любая помощь приветствуется.
Всем заранее спасибо...
Чопо