db モデルをビューに直接渡さないでください。幸運にも 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"))
コメントごとに更新
性別については、上記の提案されたビュー モデルでenderTypes がなくてもよい場合は、これを行うこともできます (ただし、考え直して、このサーバー側をビュー モデルで 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"))
最後に、別のオプションはルックアップ テーブルです。基本的に、検索タイプに関連付けられたキーと値のペアを保持します。タイプの 1 つの例は性別かもしれませんが、別のタイプは州などかもしれません。
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
これらのテーブルは、データのセットが頻繁には変更されないが、時々列挙する必要がある場合に使用するのが好きです。
お役に立てれば!