2023-02-17 436
从这个问题,它看起来有一个有意义的控制器创建一个 ViewModel ,更准确地反映视图正在尝试显示的模型,但我对一些约定(我是MVC模式的新的一些约定,如果不是已经明显).
基本上,我有以下问题:
,则这是否有意义 ViewModel
现在基本上是它.我可能有几个问题来了,但这一直困扰着我的最后一小时左右,我似乎可以在其他地方找到一致的指导.
编辑:
查看示例 nerddinner app 在Codeplex上,看起来ViewModel是控制器,但它仍然让我不舒服,他们不是自己的文件.
我创建了每个视图所谓的”ViewModel”.我将它们放在MVC Web项目中称为ViewModels的文件夹中.我在控制器和操作(或视图)后命名它们.因此,如果我需要将数据传递到成员资格控制器上的注册视图,我会创建empersepsignupViewModel.cs类并将其放在ViewModels文件夹中.
然后我添加必要的属性和方法,以便于将数据从控制器传输到视图.我使用automapper从我的视图中获取到域模型,并在必要时再次返回.
这也适用于包含其他视图类型类型的属性的复合视图模型.例如,如果您在成员资格控制器中的索引页上有5个小部件,并且您为每个部分视图创建了一个ViewModel – 您如何将数据从索引操作从索引操作传递给Partials?您将属性添加到MyPartialViewModel类型的MembershialIndexViewModel,并且在呈现部分时,您将通过Model.mypartialViewModel.
这样做允许您调整部分ViewModel属性,而无需更改索引视图.它仍然只是在Model.mypartialViewModel中传递,所以你的机会越来越少,你必须经过整个部分链子来解决一些你正在做的事情,以便在部分ViewModel中添加一个属性.
我还将将命名空间”myproject.web.viewmodels”添加到web.config,以便允许我在任何视图中引用它们,而不会在每个视图上添加一个显式导入语句.只是让它变得有点清洁.
按类别分隔类(控制器,视图,过滤器等)是废话.
如果要为您的网站的主页编写代码(/)然后创建一个名为home的文件夹,并在homeController,IndexViewModel,AboutViewModel等中填写所有相关类.
如果您有共享类,如applicationController,则可以将其放在项目的根目录中.
为什么单独的与之相关的东西(HomeController,IndexViewModel)并保持与所有关系的东西(HomeController,AccountController)?
我写了一个博客文章关于这个主题.
我将我的应用程序类保留在名为”核心”(或一个单独的类库)的子文件夹中,并使用与 kigg 样本应用,但有一些略微的变化,使我的应用程序更干燥.
我在/core/ViewData中创建一个BaseviewData类/我存储公共站点的范围内属性.
在此之后,我还在同一文件夹中创建我的所有视图viewData类,然后从BaseviewData派生并具有查看特定属性.
然后我创建一个ApplicationController,即所有控制器来自. ApplicationController具有通用GetViewData方法,如下所示:
protected T GetViewData<T>() where T : BaseViewData, new()
{
var viewData = new T
{
Property1 = "value1",
Property2 = this.Method() // in the ApplicationController
};
return viewData;
}
最后,在我的控制器操作中,我执行以下操作以构建我的ViewData模型
public ActionResult Index(int? id)
{
var viewData = this.GetViewData<PageViewData>();
viewData.Page = this.DataContext.getPage(id); // ApplicationController
ViewData.Model = viewData;
return View();
}
我认为这真的很好,它让您的观点整洁和您的控制器瘦.
以上所述是小编给大家介绍的ViewModel最佳实践,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34183.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态