复杂MVC模型中的动态对象映射(MVC模型粘合剂问题)

时间:2013-04-18 19:40:38

标签: asp.net-mvc c#-4.0 dynamic model-binding custom-model-binder

我在一个强类型模型中的对象内部有一个动态对象。模型看起来像这样:

public class MyModel
    {
        public Event Event{ get; set; }        

    }

其中包含动态搜索条件对象的Event对象如下所示:

public class Event
{
   public string EventName{ get; set; }      
   public string EventLocation{ get; set;}       
   public dynamic Criteria { get; set; }

}

以下是基本搜索条件类的示例。标准是动态的,因为不同的事件可能有不同的搜索标准。

public class BaseEventCriteria
    {
        [DisplayName("Start Date")]       
        public DateTime StartDate { get; set; }

        [DisplayName("End Date")]       
        public DateTime EndDate { get; set; }

    }

当我使用时,dynmaic对象“Criteria”在视图内的表单中渲染得很好:

@Html.EditorFor(o=> o.Event.Criteria)

问题是当我将表单发布到控制器时,“Criteria”显示为无法“System.Object”,无法将其强制转换为适当的对象。我理解这是MVC默认模型绑定器的限制,它不映射动态对象。我看到的所有涉及编写自定义模型绑定器的示例都面向模型本身是动态的,而不是强类型模型中的嵌套动态对象。任何人都可以通过使用Generics,编写自定义模型绑定器或任何其他解决方案来帮助解决方案,而不使用我不想使用的FormCollection对象?

0 个答案:

没有答案