问题标签 [viewmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
595 浏览

asp.net-mvc - 使用复杂的 viewModel 对控制器操作进行单元测试

我刚刚开始使用 ASP.NET MVC,而且我也是单元测试的新手 :) 到目前为止,一切都很好。

我有一个使用视图模型设置索引视图的控制器操作。测试控制器动作很简单,因为我可以在控制器的构造函数中传递一个虚假的服务类,但是我的视图模型非常复杂,并且在实例化时会获取它自己的服务类。

我希望代码应该使这一点更清楚......

控制器动作:

视图模型类:

编辑:

测试控制器操作时,如何让视图模型使用假服务类?

我应该放弃第一个构造函数并始终从控制器传入服务还是有其他方法?

干杯,
尼克

0 投票
2 回答
13497 浏览

asp.net-mvc - 验证 ASP.NET MVC 中的 ViewModel

大多数关于如何在 ASP.NET MVC 中实现验证的技巧似乎都围绕着模型(在模型和控制器之间构建服务层或使用验证属性装饰模型的属性)。

在我的应用程序中,我使用 ViewModels 进行控制器和视图之间的所有通信。

我的登录页面有一个名为“LoginViewModel”的 ViewModel,其属性名为“EmailAddress”。

当用户输入他们的电子邮件地址并单击提交时,这个 ViewModel 被填充并发送到控制器,在那里验证电子邮件地址。

它必须是有效的电子邮件地址,并且用户必须来自在系统中注册的域。

对此添加验证的便捷方法是什么?我应该将验证放在 ViewModel 本身吗?还是应该留在控制器中?

0 投票
2 回答
4356 浏览

jquery - jQuery 可以将 ViewModel POST 到 ASP.NET MVC 中的控制器吗?

我创建了我的 Html 文本框,以便在发回服务器时将它们绑定到自定义视图模型。

如果它是传统的 POST,这非常有用。然后我可以在控制器端接收它,如下所示:

我想知道——是否可以通过 jQuery 进行 POST 并且仍然获得相同的行为?

0 投票
3 回答
1369 浏览

asp.net-mvc - AutoMapper 将域模型展平,但它会做相反的事情吗?如果不是,那是什么?

我一直在阅读 AutoMapper,因为我在这里回答了我之前的一个问题。

它说 AutoMapper 将复杂的域模型展平,但我需要一些相反的东西。我需要将我的视图模型(扁平域模型)连接到复杂的域模型,以便我可以快速将视图模型转换为域模型。

有没有类似于 AutoMapper 的东西,它采用视图模型并将其变成复杂的域模型?

0 投票
2 回答
321 浏览

asp.net-mvc - 验证不适用于 ASP.NET MVC 中的普通对象

当我将“模型”对象(由 LinqToSQL 生成)发布到控制器时,我可以查询“ModelState.IsValid”,如果任何属性上有验证属性并且值未验证,它将被设置为“假”。

但是,如果我发布我自己的类的自定义对象,ModelState.IsValid 似乎总是返回“true”,即使该类的属性具有验证属性并且被赋予了不正确的值。

为什么这只适用于 DataContext 模型对象?这些对象是什么使它们与 ModelState.IsValid 一起工作,而普通类却不能?

我怎样才能使它与普通课程一起工作?


控制器代码:

视图模型代码:

0 投票
2 回答
823 浏览

wpf - WPF MVVM线程安全方式获取List from ViewModel

I am trying to access a List on a view model from a background worker, but am getting errors because I am going cross thread...

This is the problem method on the viewmodel: (I am gettin

I am trying to access a List on a view model from a background worker, but am getting errors because I am going cross thread...

This is the problem method on the viewmodel: (I am getting the exception the first line in the function (SMMainWindow window ...))

Any ideas? Sample code would be appreciated


It helps tremendously if you setup your ViewModel with an instance of your Window's Dispatcher. If you have this, then you can just use Dispatcher.Invoke to fetch or set items within the ViewModel.

0 投票
3 回答
326 浏览

wpf - 带有 ViewModel 的网格 - WPF

抱歉,如果这已经被问过了,但我只是想确保我做对了。

如果我有一个 domian 对象,上面有 10 个属性。我的主窗体上有一个网格,我想显示模型中几乎所有的属性。

我创建了一个视图模型来包装域对象以在 gridview 中显示,但随后我必须再次公开所有属性。我只是觉得通过视图模型直接与模型绑定感觉很脏并且有点缺陷。

因此,例如,我不太喜欢这样:

其中 DomainObject 是我的视图模型上的属性。

所以我的主要问题是,我是否应该通过视图模型公开模型上的所有属性,只是为了将其绑定到网格?

编辑:只是为了补充信息,domian 对象是 LINQ-To-SQL 对象,所以我认为它们没有实现 INotifyPropertyChanged 但我不确定。

0 投票
2 回答
767 浏览

asp.net-mvc - ASP.NET MVC - 控制器的工作

我想我开始对 MVC 中控制器的工作感到困惑。

我有一个公开五个功能的服务:

  • 列出队列中的包
  • 获取包裹
  • 删除包
  • 接受包裹
  • 拒绝包裹

我的 ASP.NET MVC 控制器依赖于该服务,并且通常可以对 Action 执行服务调用。到目前为止我很高兴。

然后第二部分是构建 ViewModel 结果。如果我在控制器内部执行此操作,控制器现在有一个爆炸性的依赖关系列表——添加的每个操作都会增加依赖关系以构建视图模型,这些都由控制器继承。我不太喜欢这个。我正在构建这个控制器,它依赖于 N 个不同的视图模型构建器,但每个请求只使用其中一个。

所以我想把所有这些都拉出来,并应用特定于每个视图模型的动作过滤器。我还没有这样做,但似乎还可以。

这对我提出的问题是:控制者的责任是什么?如果我最终将视图模型构建拉入过滤器,我的控制器所做的只是让路由执行服务调用(并提供过滤器插件)。如果我让我的控制器负责构建每个视图模型,它就会变得一团糟。

似乎我几乎想为每个请求实例化一个动作,而不是一个控制器,而我只是滥用过滤器来实现这一点?

0 投票
3 回答
2133 浏览

asp.net-mvc - ASP.NET MVC 模型/视图模型验证

我在 Linq-to-Sql 中有模型类,其中部分类标有数据注释属性和对 xVal 的引用。

当我将视图直接绑定到模型时,一切正常,xVal 生成的 JS 和服务器端仔细检查。

我的许多视图不接受输入到一个特定的模型,所以我正在设置视图模型类。我没有公开整个模型实例,而是将属性公开到我允许/需要由视图设置的模型中。

这种方法可以正确填充视图模型类,并且存储库可以正确填充记录。

它根本没有通过验证。我查看了发出的客户端代码,并且 xval 的验证数组为空。此外,IsValid 的服务器端检查始终为真。

我可以让数据注释通过视图模型的属性来进行验证,还是应该以另一种方式进行?

0 投票
3 回答
2117 浏览

asp.net-mvc - 当您的视图模型没有与域模型一样多的字段时,您如何忽略/保留 MVC 中的值?

我有一个使用 fluentNhibernate 和 Asp.net MVC 的网站。我有一个编辑视图,允许用户编辑该记录(对象)的 10 个属性中的 8 个。当您提交表单并绑定模型时,这两个不可编辑的字段会作为空字符串或默认的 DateTime 值返回到视图模型中,具体取决于属性的类型。

因为我还使用 AutoMapper 将我的视图模型映射到我的域实体,所以我不能只从数据库中加载我的对象的新副本并手动设置 2 个缺失的属性。保留那些我不想编辑的字段的最佳方法是什么?

一种可行的方法是将值保留在我的视图上隐藏的输入字段中。这行得通,但感觉很恶心。我感谢任何建议。我的 AutoMapper 中有没有办法配置这个所需的功能?

更新: 好的,所以我想我不是要忽略这些字段,而是要确保我不会保留 null 或空字符串值。忽略 AutoMapper 中的字段就是这样做的,当我尝试在保存到我的存储库之前将它们映射时,它们会被忽略并且为空。