2

ASP.Net MVC モデル バインダー内では、バインドされた型のオブジェクトを作成し、そのプロパティを更新できます。

例えば

public override object BindModel(ControllerContext controllerContext,
    ModelBindingContext bindingContext)
{
    ParentType boundModel = null;
    if (bindingContext.ModelType == typeof(ParentType))
    {
        var myFactory = new MyFactory();
        var someValue = bindingContext.ValueProvider.GetValue
            ("someFieldId").AttemptedValue;
        ChildType child = myFactory.Create(someValue);
        BindModel(child);
        boundModel = child;
    }
    return boundModel;
}

このコードで、コントローラーからの TryModelUpdate() のような BindModel(child) 呼び出しに似たものがあるかどうかを知りたいですか?

4

3 に答える 3

2

問題へのより良いアプローチは、DefaultModelBinder(おそらくあなたがそうだと思います)から派生してから、BindModelメソッドではなくCreateModelメソッドをオーバーライドすることだと思います。

そこからChildオブジェクトを返すことにより、探しているパスに沿っているはずです。

于 2010-02-19T19:29:17.660 に答える
0

バインダーは、クラス プロパティとフィールド値で同じ名前を必要とするだけで、updatemodel を呼び出すと、一致する値がモデルに配置されます。

したがって、いずれかのタイプのクラスを作成して updatemodel を呼び出すことができるはずです???

于 2010-11-18T10:59:59.117 に答える
0
public override object BindModel(ControllerContext controllerContext, 
                                 ModelBindingContext bindingContext)
{
    ParentType boundModel = null;
    if (bindingContext.ModelType == typeof(ParentType))
    {
        var myFactory = new MyFactory();
        var someValue = bindingContext.ValueProvider
                                      .GetValue("someFieldId").AttemptedValue;
        ChildType child = myFactory.Create(someValue);
        BindModel(child);
        boundModel = child;
    }

    // change here
    bindingContext.ModelMetadata.Model = boundModel;
    return BindModel(controllerContext, bindingContext);
}

これはどう?

于 2010-02-21T15:56:11.213 に答える