Asp.net mvc 强类型视图与动态类型视图

Asp.net mvc 强类型视图与动态类型视图,asp.net-mvc,Asp.net Mvc,我开始使用ASP.NETMVC。如我所见,有两种方法可以将数据传递给视图: 创建继承ViewPage的视图并将动态对象传递给视图 创建继承ViewPage的强类型视图,并将自定义视图模型类的实例传递给该视图 每个视图的优点和缺点是什么?只要可能,请始终使用强类型视图,以便准确地知道作为模型传递给该视图的数据。如果使用dynamic,您实际上并不总是知道数据将是什么,如果情况发生变化,可能会导致运行时错误 根据,强类型视图对于处理复杂类型数据更有用。 例如,我有一类人: Public Class

我开始使用ASP.NETMVC。如我所见,有两种方法可以将数据传递给视图:

  • 创建继承ViewPage的视图并将动态对象传递给视图
  • 创建继承ViewPage的强类型视图,并将自定义视图模型类的实例传递给该视图

  • 每个视图的优点和缺点是什么?

    只要可能,请始终使用强类型视图,以便准确地知道作为模型传递给该视图的数据。如果使用dynamic,您实际上并不总是知道数据将是什么,如果情况发生变化,可能会导致运行时错误

    根据,强类型视图对于处理复杂类型数据更有用。 例如,我有一类人:

    Public Class Person
    
    {
     String _name;
     String _age;
     Pet _pet;
    
     // gets & sets below..etc
     }
    
    如果您有一个用例,希望将这个特定类绑定到一个表单(以创建一个“新”的人),那么在使用复杂类型Pet之前,这将是非常简单的

    您只需将此人强类型化为特定视图,然后在该视图中调用强类型化为“Pet”的模板或视图文件。要将复杂类型分配给模板/视图,只需使用html mvc helpers html.ControlFor。在这个特定的实例中,由于您没有处理像文本框那样的简单html控件,因此您将使用:

    Html.EditorFor(model => model.Pet, "Pet")  
    
    在这里您可以看到,您正在将视图模型“pet”的一个实例放入名为“pet”的强类型视图中,以便在提交原始视图表单时返回一个完全充满数据的视图模型


    这是在更复杂、更大规模的网站中简化和封装数据的一种非常有效的方法。

    我认为,如果你不问“哪一个更好”,而只问优点/缺点,那么争论就更少了。强类型视图的其他优点是:在视图编译时进行代码验证和intellisense。