asp.net mvc + activerecord сохранение графа объектов - PullRequest
0 голосов
/ 31 декабря 2008

Я использую asp.net mvc и пытаюсь создать нового сотрудника, в своей форме я использую Html.DropDown (...), чтобы отобразить список отделов для выбора.

В идеале я бы хотел, чтобы MVC просто выяснил, какой отдел был выбран (свойство Id - это значение в раскрывающемся списке), извлеките его и задайте во входящем объекте Employee. вместо этого я получаю нулевое значение, и мне нужно самому получить Департамент, используя Request.Form [...].

Я видел пример здесь: http://blog.rodj.org/archive/2008/03/31/activerecord-the-asp.net-mvc-framework.aspx, но это не похоже на работу с asp.net mvc beta

Это базовый CRUD с хорошо зарекомендовавшим себя ORM .... разве это действительно так сложно?

Ответы [ 2 ]

1 голос
/ 12 марта 2009

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!
    }

См. Этот блог для получения дополнительной информации

0 голосов
/ 11 марта 2009

I портировал ARFetch на ASP.NET MVC пару недель назад ... возможно, это могло бы вам помочь.

...