问题标签 [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.
asp.net-mvc - ASP.NET MVC 术语让我大吃一惊——为什么是“ViewModel”?
我是 ASP.NET MVC 新手,但之前使用过许多模型-视图-控制器框架。
我最近遇到了将您的特定视图需要的数据片段(实际上,它已分配给ViewData)收集到一个名为 (NameOfView) ViewModel的新类中的约定。
收集这些数据使其与 View/Controller 交互提供的函数相关联,这让我觉得这是一个辅助结构,甚至是闭包机制(在“封装变量集合”的意义上)。
那么,既然它既不是视图也不是模型,为什么还要叫它“ViewModel”呢?
有没有人觉得这个名字很混乱?
编辑:将属性放到视图上以便控制器可以填充它们有什么问题(如在其他 MVC 框架中)?
asp.net-mvc - 在 ASP.NET MVC 中水合 ViewModel
我有一个由许多用户控件组成的页面。此页面的视图模型相当复杂。
该页面还有一个 PostModel,其中包含用于过滤、排序等信息。
验证简单的 PostModel,然后控制器打开 3 个以上的存储库,对每个存储库进行多次调用并构建视图模型。至少可以说我的控制器动作已经变得相当大了。
这是迄今为止我工作过的最复杂的页面,我很难决定如何使它更简单。
我的第一个想法是创建一个视图模型工厂,在绑定验证之后,它会调用存储库并返回 ViewModel。
然后我考虑创建一个自定义模型绑定器,该绑定器将验证 PostModel,然后一步水合 ViewModel。
所以我的问题是你如何水合一个复杂的视图模型?
在我写这篇文章的时候,我想到了使用 Html.RenderAction 并为构成这个页面野兽的每个用户控件创建一个模型。
更新:
存储库调用 WCF 服务,应用程序是更大 SOA 架构的一部分。
cocoa - 无法从模型控制器对象写入 NSTextField
在始终从我的 AppController 对象中运行单片代码块之后,我刚刚学会了如何使用单独的模型控制器对象来模块化我的代码(使用起来更整洁,更不容易混淆:-))
我的简单测试应用程序有一个主 AppController 和两个模型对象(Model1 和 Model2)。我可以成功地将数据从 AppController 传递给模型,并且模型本身可以运行方法并按照它们的意图“在内部”处理传递的数据——但我无法让它们与用户界面。这是我的代码的相关部分:
在 AppController.m #import "AppController.h"
...在 Model2.h #import
...最后在 Model2.m #import "Model2.h"
两个模型对象都有到公共 NSTextField 的出口,我已经从两个对象控制拖动到字段并将它们连接起来。我的 AppController不 知道 NSTextField (我假设,甚至不想知道)。控制器对象和模型对象之间没有建立任何 IB 连接。
NSLog 告诉我正在创建模型对象,并且传递的值使它变得那么远......但不是从那里进入 GUI 窗口中的文本字段。我没有收到任何编译器错误或警告。我是否错过了某种“setTarget:”电话?
任何帮助/想法将不胜感激。谢谢 :-)
wpf - 如何使视图模型和模型的集合保持同步
我正在使用 wpf 工具包数据网格来显示 AccountViewModel 的可观察集合。
问题是当我从网格中删除一个帐户时,我希望它从 ObservableCollection 中删除 - 为用户提供视觉反馈,但我希望 Account 模型的基础列表保持不变,只需设置一个“IsDeleted”标志帐户模型。
然后,每当提交更改时,我的服务就知道要在数据库中添加/更新或删除哪些帐户。
我订阅了 CollectionChanged 事件:
然后在删除某些内容时将视图模型的模型 isdeleted 标志设置为 true:
但显然这会将其从可观察集合中删除。因此,当我提交更改时,将没有设置 IsDeleted 标志的帐户。即他们将已经被删除。
那么这是否意味着我需要维护两个列表,一个是帐户模型列表,另一个是可观察的帐户视图模型集合?这看起来很讨厌,必须有更好的方法来做到这一点。
asp.net-mvc - ViewModel 有自己的逻辑吗?
在分配 ViewModel 字段时,是否应该将域对象直接传递给 ViewModel 对象,然后由 ViewModel 对象确定如何呈现数据,或者是否应该像服务这样的另一个类将数据从 Model 分配给 ViewModel?
还:
编辑:将视图模型分为接收者和演示者有什么意义吗?(而不是在更新时仅绑定某些字段?)
c# - ASP.NET MVC ViewModel 和 DropDownList
我的 ViewModel 中有 2 个属性
我想使用 Html.DropDownListFor 编辑它
我想让 MVC 自动将数据序列化到 ViewModel 中/从 ViewModel 中序列化数据,这样我就可以执行以下操作
实现这一目标的最佳方法是什么?
asp.net-mvc - ASP.Net MVC 2 验证是否需要在模式和使用方面进行更多思考?
这里是地势。像大多数人一样,我有我的领域对象和我的视图模型。我喜欢使用视图模型的想法,因为它允许专门为给定的视图上下文创建模型,而无需更改我的业务对象。
我遇到的问题是在我的域对象上定义类型级别验证并将这些规则发送给客户端。在这种情况下,假设我使用数据注释来描述验证规则,当我将数据从域对象移动到视图模型时,视图模型不再知道它应该让接口执行什么验证(因为验证是在域对象上定义)。
使用 MVC 2,您可以让它根据当前对象的验证规则自动执行客户端/服务器端验证。但是因为验证规则是在域对象而不是视图模型上定义的,所以我必须在视图模型上复制验证规则才能使其正常工作。
其他人如何处理此类问题?我的想法是除了将域对象的数据映射到视图模型之外,我们还需要跨验证规则进行映射,但是我还没有真正看到其他人谈论这个问题...... Brad Wilson 最近谈到了这个问题最后,但还没有真正解决域对象和视图模型上的规则重复问题……您的想法是什么?
干杯安东尼
.net - 不同角色/授权级别的相同实体类型(任何 ORM)的不同版本
例如,考虑:
对于某些用户,视图模型只需要name
和email_address
。其他人可能有一个视图模型,其中包括这些属性加上ssn
,age
和home_address
。假设还有一个统计学家,他的观点得到age
和home_address
。
现在,我可以将其拆分为IStaffBasic
、IStaffDetails
和IStaffStats
接口继承,以将给定视图模型中的 API 限制为适当的属性。
但是,当通过网络从数据服务中检索到此实体时,它仍将包含其他详细信息,这些信息不得出现。
因此,最好
(A) 为这些版本中的每一个创建完全不同的实体类型,在某种程度上污染服务层 API,为每种类型使用许多额外的近乎重复的查询操作,或者
(B) 总是返回一个Staff
实体,但是 ( 1)从服务中返回它们,并根据服务null
的授权检查将排除的属性设置为;(2)如上所述在视图模型中使用有限的接口,或者
(C)使用我没有的非常优雅的模式或解决方案考虑过,但你要告诉我。
选项 A 在视图模型级别看起来更干净,但服务 API 会很讨厌。选项 B 似乎增加了服务器上实体处理的复杂性,但更好地遵守了开闭原则。
想法?
asp.net-mvc - 通过多个键对存储库中的对象进行模型绑定
假设以下路线:
这两个参数region
共同storehouse
标识了一个实体 - a Storehouse
。因此,在某个仓库的上下文中调用了一堆控制器。我想写这样的动作:
在这里,我可以读到您的想法:“编写自定义模型活页夹,伙计”。我愿意。然而,问题是
如何避免自定义模型绑定器中的魔术字符串?
这是我当前的代码:
如果只有一个键,则bindingContext.ModelName
可以使用...
可能还有另一种方法可以为所有操作提供Storehouse
对象,即将其声明为控制器的属性并将其填充到Controller.Initialize
.
asp.net-mvc - 使用新的“For”HTML 帮助器时,ViewModel 方法会干扰 MVC 2 中的 ModelBinding
我正在使用 .net MVC 2.0 并设置了一个接收自定义 ViewModel 对象的编辑视图。ViewModel 是一个具有两个属性的类:
在我看来,有一个表格用于更新投资组合对象。SelectList 被传递,因此我可以有一个与投资组合相关的部门的下拉列表。这里没有什么特别的,和我在 1.0 中所做的完全一样。
当我使用新的 TextBoxFor 和 DropDownListFor 辅助方法时,问题就出现了。
我正在这样设置它们:
它们分别产生以下 HTML 输出:
法律
请注意,name 和 id 属性现在带有“Portfolio”前缀。我认为这是因为它们源自“model.Portfolio.X”。这似乎干扰了我在 Edit ActionResult 的 Controller 中应用模型绑定的能力。
动作结果如下:
我怎样才能(a)停止在视图中应用“组合”前缀,或者(b)让 ModelBinding 使用它。
谢谢,
麦克风