0

在过去的 2 天里,我一直在尝试解决这个问题......
我的主要模型包含一个“动态”类型的属性,如下所示:

public class WGTTestModel
{
    private dynamic _oProp3 = null;

    public WGTTestModel()
    {
    }

    public int Prop1 { get; set; }
    private string Prop2 = null;

    public dynamic Prop3
    {
        get
        {
            if (_oProp3 == null)
            {
                // depending on other factors, this could return a different model
                _oProp3 = new SubModel1();
            }

            return _oProp3 ;
        }
        set
        {
            _oProp3 = value;
        }
    }
}  

SubModel1 如下所示:

public class SubModel1
{
    public SubModel1()
    {
    }

    public int Prop1 { get; set; }
    public string Prop2 { get; set; }
}  

属性“WGTTestModel.Prop3”被传递到局部视图,如下所示:

@Html.Partial("~/MVCFrontEnd/Widgets/TESTING/Views/_PartialView.cshtml", (object)Model.Prop3)  

请注意,我必须将强制转换添加到 (object),因为它不允许我传递“动态”类型。

问题:我在部分视图中对属性“SubModel1.Prop1”和“SubModel1.Prop2”设置的值在发布表单时没有绑定。

我进行的另一个测试是在我的“WGTTestModel”中将“Prop3”的类型从“动态”更改为“SubModel1”。然后,在将模型传递到局部视图时,我能够移除对对象的强制转换。这次一切都按预期工作并且值正确绑定。

DefaultModelBinder 是否无法绑定“动态”类型属性?如果是这样,是否有任何可能的解决方法?

任何帮助将不胜感激!

4

0 回答 0