asp.net mvc + Activerecord-Speichern von Objektdiagramm

Ich verwende asp.net mvc und versuche, einen neuen Mitarbeiter zu erstellen, in meinem Formular verwende ich html.DropDown(...), um eine Liste der Abteilungen anzuzeigen, aus der ich auswählen kann.

Idealerweise möchte ich, dass MVC nur herausfindet, welche Abteilung ausgewählt wurde (Id-Eigenschaft ist der Wert in Dropdown), es abholt und im eingehenden Employee-Objekt setzt. Stattdessen erhalte ich einen Nullwert und ich muss die Abteilung selbst mit dem Request.Form abholen[...].

Ich sah hier ein Beispiel: http://blog.rodj.org/archive/2008/03/31/activerecord-the-asp.net-mvc-framework.aspx but that doesn't seem to work with asp.net mvc beta, aber das scheint nicht mit asp.net mvc beta

zu funktionieren. Dies ist grundlegende CRUD mit einem bewährten ORM.... brauchen, es wirklich so schwer sein?

Antwort auf "asp.net mvc + Activerecord-Speichern von Objektdiagramm " 2 von antworten

I ported ARFetch to ASP.NET MVC a couple of weeks ago... maybe that could help you. vor ein paar Wochen... vielleicht könnte Ihnen das helfen.

ASP.NET MVC weiß nicht, wie der DepartmentId-Formularwert in einen Department.Load(DepartmentId)-Aufruf übersetzt werden soll. Dazu müssen Sie einen Binder für Ihr Modell implementieren.

[ActiveRecord("Employees")]
[ModelBinder(EmployeeBinder]
public class Employee : ActiveRecordBase<Employee>
{
    [PrimaryKey]
    public int EmployeeId
    {
        get;
        set;
    }

    [BelongsTo(NotNull = true)]
    public Department Department
    {
        get;
        set;
    }

    // ...
}

Der EmployeeBinder ist dafür verantwortlich, Routen-/Formulardaten in ein Objekt umzuwandeln.

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
}

Damit wird immer dann, wenn ein Mitarbeiter als Parameter für eine Aktion verwendet wird, der Binder aufgerufen.

public ActionResult Create(Employee employee)
    {
        // Do stuff with your bound and loaded employee object!
    }

Siehe This blog post for further information