Не передавайте модели БД непосредственно вашим взглядам. Вам повезло, что вы используете MVC, так что инкапсулируйте, используя модели представления.
Создайте класс модели представления следующим образом:
public class EmployeeAddViewModel
{
public Employee employee { get; set; }
public Dictionary<int, string> staffTypes { get; set; }
// really? a 1-to-many for genders
public Dictionary<int, string> genderTypes { get; set; }
public EmployeeAddViewModel() { }
public EmployeeAddViewModel(int id)
{
employee = someEntityContext.Employees
.Where(e => e.ID == id).SingleOrDefault();
// instantiate your dictionaries
foreach(var staffType in someEntityContext.StaffTypes)
{
staffTypes.Add(staffType.ID, staffType.Type);
}
// repeat similar loop for gender types
}
}
Контроллер:
[HttpGet]
public ActionResult Add()
{
return View(new EmployeeAddViewModel());
}
[HttpPost]
public ActionResult Add(EmployeeAddViewModel vm)
{
if(ModelState.IsValid)
{
Employee.Add(vm.Employee);
return View("Index"); // or wherever you go after successful add
}
return View(vm);
}
Затем, наконец, в вашем представлении (которое вы можете использовать Visual Studio, чтобы сначала создать его), измените унаследованный тип на ShadowVenue.Models.EmployeeAddViewModel. Кроме того, для раскрывающихся списков используйте:
@Html.DropDownListFor(model => model.employee.staffTypeID,
new SelectList(model.staffTypes, "ID", "Type"))
и аналогично для раскрывающегося списка полов
@Html.DropDownListFor(model => model.employee.genderID,
new SelectList(model.genderTypes, "ID", "Gender"))
Обновление по комментариям
Что касается пола, вы также можете сделать это, если в описанной выше модели представлений вы не можете использовать значения гендерных типов (хотя, подумав, возможно, я бы сгенерировал эту сторону сервера в модели представлений как IEnumerable). Таким образом, вместо new SelectList...
ниже вы бы использовали IEnumerable.
@Html.DropDownListFor(model => model.employee.genderID,
new SelectList(new SelectList()
{
new { ID = 1, Gender = "Male" },
new { ID = 2, Gender = "Female" }
}, "ID", "Gender"))
Наконец, еще одна опция - это таблица поиска. По сути, вы сохраняете пары ключ-значение, связанные с типом «Уточняющий запрос». Одним из примеров типа может быть пол, а другим может быть State и т. Д. Мне нравится структурировать мой тип следующим образом:
ID | LookupType | LookupKey | LookupValue | LookupDescription | Active
1 | Gender | 1 | Male | male gender | 1
2 | State | 50 | Hawaii | 50th state | 1
3 | Gender | 2 | Female | female gender | 1
4 | State | 49 | Alaska | 49th state | 1
5 | OrderType | 1 | Web | online order | 1
Мне нравится использовать эти таблицы, когда набор данных меняется не очень часто, но время от времени его необходимо перечислять.
Надеюсь, это поможет!