0

asp.net mvcを使用していて、新しいEmployeeを作成しようとしています。フォームでは、Html.DropDown(...)を使用して、選択する部門のリストを表示しています。

理想的には、MVCが選択された部門(Idプロパティはドロップダウンの値)を把握し、それをフェッチして、着信するEmployeeオブジェクトに設定することを望んでいます。代わりに、null値を取得し、Request.Form[...]を使用して自分でDepartmentをフェッチする必要があります。

ここで例を見ました:http://blog.rodj.org/archive/2008/03/31/activerecord-the-asp.net-mvc-framework.aspxですが、asp.netmvcでは機能しないようですベータ

これは、実績のあるORMを備えた基本的なCRUDです。本当に難しい必要がありますか?

4

2 に答える 2

1

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

詳細については、このブログ投稿を参照してください

于 2009-03-12T04:34:02.320 に答える
0

数週間前にARFetchをASP.NETMVCに移植しました...多分それはあなたを助けるかもしれません。

于 2009-03-11T13:54:31.967 に答える