Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使向视图传递数据(ASP.NET MVC)更容易_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 使向视图传递数据(ASP.NET MVC)更容易

Asp.net mvc 使向视图传递数据(ASP.NET MVC)更容易,asp.net-mvc,Asp.net Mvc,通常我需要将“复杂”的数据传递给我的视图:不同的数据库对象、类等,我已经厌倦了创建几十个类似的类助手 class StatsPageViewData { public User User { get; set; } public Something Something { get; set } // blah blah } 当然,我不能只使用ViewData[“something”],它只是不那么舒服 所以我的问题是,有没有办法让这个过程更简单,以某种方式实现自动化?使

通常我需要将“复杂”的数据传递给我的视图:不同的数据库对象、类等,我已经厌倦了创建几十个类似的类助手

class StatsPageViewData
{
    public User User { get; set; }
    public Something Something { get; set }
    // blah blah
}
当然,我不能只使用ViewData[“something”],它只是不那么舒服

所以我的问题是,有没有办法让这个过程更简单,以某种方式实现自动化?

使用一个插件,比如帮助您创建这些帮助器类的插件

从使用类和属性开始。这将在编辑器中将它们标记为缺失,然后您可以使用插件创建类和属性,从而使创建帮助器类的速度比使用其他方法快得多。

使用这样的插件可以帮助您创建这些帮助器类


从使用类和属性开始。这将在编辑器中将它们标记为缺失,然后您可以使用插件创建类和属性,创建帮助器类的速度要比用其他方法快得多。

从ViewModelBase开始,必要时进行扩展。

从ViewModelBase开始,必要时进行扩展。

我认为每个视图的模型模式是最佳实践。您可以尝试在可能的情况下使用继承和组合来共享模型组件(保持代码干燥),但我在这方面的成功有限。为了简化从视图模型到业务模型的转换,您可以尝试以下方法。我对唯一一个能从中受益的大项目太过深入,无法应用它,但我的雷达上有一些东西试图简化这个过程。

我认为每个视图的模型模式是一个最佳实践。您可以尝试在可能的情况下使用继承和组合来共享模型组件(保持代码干燥),但我在这方面的成功有限。为了简化从视图模型到业务模型的转换,您可以尝试以下方法。我对唯一一个能从中受益的大型项目太过深入,无法应用它,但我的雷达上有一些东西试图简化这个过程。

视图模型不应该仅仅是一个域类的集合。首先,将领域类放入视图模型是一个大主题;很多人认为你不应该那样做。您的视图可能不需要完整的用户实例,而只需要一个名称。如果在视图模型中保留完整的用户实例,则会隐藏真实的视图模型意图,使其难以重用,等等。您最好使用字符串UserName属性来正确设置名称的格式,而不是在视图中访问用户属性并在其中设置格式

这是一个理论,没有人可以遵循它;但记住并努力做到这一点是很好的

其次,视图模型不应该只是域类的集合,因为它们应该提供视图语义——例如,验证属性和其他表示逻辑。您可以使用聚合属性来提供选择列表的数据、格式等。另一个例子是,后视图模型可以有将原始表单数据转换为实体的方法

您应该将一些表示逻辑从视图和/或控制器移动到视图模型中—格式、仅视图需要的属性,等等。控制器不应将实体集合转换为视图模型数据集合-视图模型应这样做。视图不应将用户格式转换为单个名称和地址字符串-视图模型应


这样,您就不会厌倦创建“视图模型”类,因为它们不再是哑巴,您的工作也不会被转储和/或重复。视图模型类与应用程序中的其他类一样重要。

视图模型很少只是域类的集合。首先,将领域类放入视图模型是一个大主题;很多人认为你不应该那样做。您的视图可能不需要完整的用户实例,而只需要一个名称。如果在视图模型中保留完整的用户实例,则会隐藏真实的视图模型意图,使其难以重用,等等。您最好使用字符串UserName属性来正确设置名称的格式,而不是在视图中访问用户属性并在其中设置格式

这是一个理论,没有人可以遵循它;但记住并努力做到这一点是很好的

其次,视图模型不应该只是域类的集合,因为它们应该提供视图语义——例如,验证属性和其他表示逻辑。您可以使用聚合属性来提供选择列表的数据、格式等。另一个例子是,后视图模型可以有将原始表单数据转换为实体的方法

您应该将一些表示逻辑从视图和/或控制器移动到视图模型中—格式、仅视图需要的属性,等等。控制器不应将实体集合转换为视图模型数据集合-视图模型应这样做。视图不应将用户格式转换为单个名称和地址字符串-视图模型应


这样,您就不会厌倦创建“视图模型”类,因为它们不再是哑巴,您的工作也不会被转储和/或重复。视图模型类与应用程序中的其他类一样重要。

简单的约定可以大大简化AutoMapper的使用;e、 使视图模型通过静态GetAutoMap()方法提供映射,这些方法在启动时通过引导代码调用;e、 使视图模型通过静态GetAutoMap()方法提供映射,这些方法在启动时通过引导代码调用。我同意你所说的一切。但有时确实需要传递整数数组之类的内容,在这种情况下,使用ViewData会非常尴尬。在这里你不需要任何抽象层。我目前在我的项目中有150个视图,有时我会传递单个对象(arr)