Прежде всего, извините за то, что вы недавно собрались, тема, которая была покрыта много раз прежде, чем на этом сайте. Насколько я стараюсь, я просто не могу получить мой код работать.ASP.net MVC3 Выберите иностранный ключ в. С помощью DropDownList
я следующие классы моделей:
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>
Когда я тестирую e, я могу перейти к /ProjectsTable/Parameters/x
без проблем; выпадающее меню будет правильно сгенерировано, содержащее список имен менеджеров. Однако, когда я нажимаю кнопку «Обновить», идентификатор Manager_ID выделяется красным цветом, что указывает на то, что изменение не регистрируется. Я могу подтвердить, что изменения не были зарегистрированы путем перехода на /ProjectsTable/list
, где я не вижу никаких изменений, которые вступили в силу.
Я попытался добавить @Html.ValidationMessageFor(Model.Manager_ID)
, результат в любом случае «Значение« x »недействительно», где x - допустимое значение ID (я проверил его по базе данных).
Я просмотрел сгенерированный источник HTML и не вижу ничего плохого там.
У меня есть подозрение, что мне нужно заменить @HTML.DropDownList
на @HTML.DropDownListFor
, но я не могу понять, какие параметры ему нужны, чтобы заставить его работать. EDIT - Мне удалось получить DropDownListFor
, но проблема не устранена. Связанный с этим вопрос, помогающий мне решить эту проблему, может состоять в том, как просматривать сообщения, отправленные обратно на сервер.
Любая помощь будет высоко оценена.
Поблагодарив всех вас заранее ...
Чопо
Интересно, что когда-то я переименовать viewbag в 'm_id' и изменить cshtml код в '@ HTML.DropDownList (" m_ID ", String.Empty)' Я больше не получаю никакой ошибки проверки, но теперь мой контроллер просто не регистрирует и не сохраняет то, что я выбираю в 'DropDownList'. Могу ли я использовать 'DropDownList', или мне нужно переключиться на' DropDownListFor', и если да, какие параметры мне нужно ввести. – Chopo87
Документация для DropDownListFor это [здесь] (http://msdn.microsoft.com/en-us/library/system.web.mvc.html.selectextensions.dropdownlistfor (v = vs.108) .aspx). –
Значения ddl не находятся в вашем контроллере, потому что объект viewBag не является частью модели, которую вы передаете. –