0

我正在使用 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测试版

这是具有经过充分验证的 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
}

有了这个,只要一个 Employee 被用作一个动作的参数,活页夹就会被调用。

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

有关详细信息,请参阅此博客文章

于 2009-03-12T04:34:02.320 回答
0

几周前,我将 ARFetch 移植到了 ASP.NET MVC ……也许这对你有帮助。

于 2009-03-11T13:54:31.967 回答