C# ASP.NET MVC:我真的必须为每个操作创建一个视图吗?

C# ASP.NET MVC:我真的必须为每个操作创建一个视图吗?,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,如果我的应用程序有一个相当粗糙的区域,我真的需要创建单独的“创建”和“编辑”视图吗?HTML实际上是相同的。我想要一个“编辑”和“创建”动作来呈现一个“Show.aspx”视图,但Resharper 5肯定在抱怨没有“显示”动作 最佳做法是什么?有其他选择。基本上在我脑海里,你有三个选择 您可以创建一个用户控件,并使用非常轻量级的编辑和创建页面 如果您使用的是ASP.MVC 2,则可以将布局捕获为视图模型上的属性,并在编辑/创建案例编辑器for/EditorForModel中使用新的模板帮助程序

如果我的应用程序有一个相当粗糙的区域,我真的需要创建单独的“创建”和“编辑”视图吗?HTML实际上是相同的。我想要一个“编辑”和“创建”动作来呈现一个“Show.aspx”视图,但Resharper 5肯定在抱怨没有“显示”动作


最佳做法是什么?

有其他选择。基本上在我脑海里,你有三个选择

  • 您可以创建一个用户控件,并使用非常轻量级的编辑和创建页面
  • 如果您使用的是ASP.MVC 2,则可以将布局捕获为视图模型上的属性,并在编辑/创建案例编辑器for/EditorForModel中使用新的模板帮助程序DisplayFor和
  • 您可以通过控制器操作在调用视图时指定视图名称

  • 您可以指定控制器方法要使用的视图,因此对拥有两个不同视图没有严格要求

    如果“添加”视图和“编辑”视图看起来完全相同,但您想让用户清楚它们是在添加还是在编辑,只需将不同的标题推入ViewData,并在共享视图中显示即可


    您还可以将视图放在“共享”文件夹中,或创建可共享的.ASCX部分。

    试试看。这很有道理。视图应该始终为前端开发人员的方便而设置,因为控制器可以将数据传递给任何视图,而无需任何额外的工作。你不应该因为ReSharper这么说就觉得自己被限制做某事。

    你不必“非得”做任何事情。MVC是基于约定的,这些约定很有价值,但在技术上并不是必需的。在您的情况下,我认为更重要的是避免冗余代码

    您可以考虑只使用一个“更新”操作和一个Update .ASPX视图(表单)来进行。

    创建和更新时使用相同的表单。唯一的区别是,在创建表单时,表单没有对象ID

    提交后,如果更新操作看到ID,则加载对象。如果没有,它将实例化一个新的。然后只需更新表单中的属性,然后提交(保存)

    因此,一个行动和一个观点。更少的代码和它保持惯例