ASP.NET MVC は、DepartmentId フォーム値を Department.Load(DepartmentId) 呼び出しに変換する方法を知りません。これを行うには、モデルのバインダーを実装する必要があります。
[ActiveRecord("Employees")]
[ModelBinder(EmployeeBinder]
public class Employee : ActiveRecordBase<Employee>
{
[PrimaryKey]
public int EmployeeId
{
get;
set;
}
[BelongsTo(NotNull = true)]
public Department Department
{
get;
set;
}
// ...
}
EmployeeBinder は、ルート/フォーム データをオブジェクトに変換する役割を果たします。
public class EmployeeBinder : IModelBinder
{
#region IModelBinder Members
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// ...
if (controllerContext.HttpContext.Request.Form.AllKeys.Contains("DepartmentId"))
{
// The Department Id was passed, call find
employee.Department = Department.Find(Convert.ToInt32(controllerContext.HttpContext.Request.Form["DepartmentId"]));
}
// ...
}
#endregion
}
これにより、従業員がアクションのパラメーターとして使用されるたびに、バインダーが呼び出されます。
public ActionResult Create(Employee employee)
{
// Do stuff with your bound and loaded employee object!
}
詳細については、このブログ投稿を参照してください