【问题标题】:Project structure / architecture for shared or partial views共享或部分视图的项目结构/架构
【发布时间】:2017-07-01 22:20:08
【问题描述】:
我是一名经验丰富的 asp.net 网络表单开发人员,但我是 MVC 新手,正在寻找有关如何设置我的 MVC 项目的指导。在我的 MVC 5 项目中,我想创建以下内容:
- 允许用户编辑其个人资料详细信息的基本数据输入页面。用户可以在网站上随时使用此页面。
- 一个向导页面(或一组页面),其中包括一个步骤,供用户输入其个人资料详细信息。所有用户在首次登录时都需要通过向导。
我想将配置文件编辑器构建为部分视图(或类似 asp.net 用户控件),然后在向导页面和独立的配置文件编辑器页面上重复使用它。阅读本文 (https://www.simple-talk.com/dotnet/asp-net/tips-and-tricks-about-razor-partial-views/) 后,部分视图似乎有助于重用代码。
我的问题:我应该如何构造我的控制器/代码,以便实际获取用户在局部视图中输入的数据并将其提交到数据库中。每个单独的页面是否需要自己的控制器和重复的代码来将数据保存到数据库?局部视图可以有自己的控制器或代码吗?任何文章或教程的链接将不胜感激。
我的向导中有几个其他步骤将重用来自其他页面的代码/控件,因此我希望为这种代码重用找到一个好的模式。
谢谢,
标记
【问题讨论】:
标签:
asp.net-mvc
razor
asp.net-mvc-5
【解决方案1】:
每个单独的页面是否都需要自己的控制器和重复的代码来将数据保存到数据库中?
他们需要他们的独立控制器或至少他们单独的操作,但您应该共享将数据保存到数据库的代码,以便检查存储库模式。
局部视图可以有自己的控制器或代码吗?
是的,但对于这种情况,它不是最佳选择。
任何文章或教程的链接将不胜感激。
最好的资源可能是微软自己的文档:
Docs homepage、basic stuff 和特别是 this 以了解 ASP.NET MVC 中的 CRUD。
对于共享创建/编辑表单,您可以使用editor templates,如下所示:
ProfileModel.cs
public class ProfileModel
{
public string Name { get; set; }
}
你应该在Views/Shared/EditorTemplates/Profile.cshtml中创建一个EditorTemplate
@model ProfileModel
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model => model.Name)
在你的视图中像这样使用它:
@Html.EditorFor(m => m.Profile)
【解决方案2】:
我会考虑你的每一个问题给你一个答案..
我应该如何构建我的控制器/实际需要的代码
用户在局部视图中输入的数据并提交到
数据库。
您可以根据应用程序的 ui 特定关注点来分离控制器:例如,在您的情况下,您需要管理用户配置文件编辑表单,我们可以考虑使用帐户管理关注点元素。因此,您可以创建一个更通用的 Account 控制器类,在其中实现特定的用户配置文件操作,这些操作将负责管理模型和视图之间的交互。
每个单独的页面都需要自己的控制器吗?
将数据保存到数据库的代码?
正如刚刚指出的那样,它不需要......您只需要实现其特定关注相关控制器的一些操作,并为需要该特定逻辑并尊重操作方法要求的每个视图或部分视图重用该操作。
局部视图可以有自己的控制器或代码吗?
一个通用对象来管理它的行为就足够了。就这个问题而言,您可以实现非常好的模型视图视图模型模式。特别是这种模式将注意力集中在视图模型对象上,这些对象只不过是一些用于从视图和操作来回通信的 dto,这将是“ model" 绑定在视图的 ui 表单中。