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!
}
См. Этот блог для получения дополнительной информации