问题标签 [asp.net-mvc-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 投票
1 回答
670 浏览

asp.net-mvc-4 - 在 Mvc4 中的页面 PostBack 后返回空值

我想创建Invoice Create View。我的视图模型如下:

获取方法如下:

我的看法如下:

邮寄方式如下:

我的问题是,当我单击 Post 方法中视图中的任何按钮时,发票变量为空。我该如何解决?提前致谢。

0 投票
2 回答
137 浏览

c# - Asp.Net MVC 将两个视图模型添加到第三个

我有两个视图模型,VM1 和 VM2——我想将它们添加到第三个视图模型中,这样我就可以将两个信息表发送到我的视图中——但我很挣扎。

我的视图模型是:

在我的控制器中,我有一个联系人列表以及一个宠物名和类型列表:

我要做的就是将这两个列表添加到 VM3 视图模型中,这样我就可以将 2 个单独的信息列表发送到我的视图:

但是,在上面的最后一行中,我收到了错误:

Cannot implicitly convert type 'System.Collections.Generic.List<bm.Models.VM1>' to 'bm.Models.VM1'

如何将这两个列表添加到 VM3 ?

谢谢,

标记

0 投票
1 回答
327 浏览

c# - 绑定到 ViewModel 时 WebGrid 不更新

我正在使用 MVC 3 和剃须刀引擎制作网站。我有一个 WebGrid,它有一个 ViewModel 作为它没有更新的源。奇怪的是它只在我重新编译项目时更新,我想通过 ajax 调用或至少通过页面刷新来更新它。

0 投票
1 回答
123 浏览

asp.net - ASP.NET Razor ViewModel 属性在某处被修改

我有一个非常简单的 Controller + View

这是迄今为止我们在 MVC4 应用程序中拥有的最简单的控制器和视图,但是 - 它做了一些奇怪的事情:我得到了 TextBox,它是用@Html.EditorFor(model => model.UserName)预填充的UserId创建的模型而不是用户名

我对其进行了调试,并且一如既往地在UserNameUserId中有正确的值。您还可以看到,我在 View 中添加了两次@Model.UserName以查看它是否也正确呈现,是的,它打印的是 UserName 而不是 ID。

我还检查了对UserName -property 的引用,但没有找到任何可以修改它的引用。我的问题是 - 你有什么想法,代码可以在哪里修改或者如何找到它?

它只发生在这一个控制器上的这一操作上(约 25 个控制器和约 200 个操作)

谢谢

0 投票
1 回答
3096 浏览

c# - 在ViewModel,ASP.net MVC中定义“模型”类型的属性是否很好

我已经阅读了几篇关于在 ASP.net MVC 中使用 ViewModel 的文章,并意识到它与 MV-VM 模式中的“ViewModel”不同。

使用 ViewModel 是为了避免直接从 View 访问模型,但是在 ViewModel 中具有类型属性(在模型层定义)是一种好方法吗?这意味着最终我们需要将Model 命名空间包含到 ViewModel 中。

例如

模型
1. YesNoTBDValue 实体/POCO 类

2项目实体中使用的 YesNoTBDValue 类(在模型本身中定义)

查看模型
1. ProjectEditViewModel

控制器
项目控制器(在编辑操作中创建视图模型的新实例)

查看
YesNoTBDValues 列表中的 Showing DropDownList 并将所选项目保留在 IsAvailableSelectedItemId

请建议我如何正确编码。

重复问题:ViewModel 是否应该包含 Model 的命名空间?在我的示例中 YesNoTBDValue是在模型中定义的,要使用它,我正在使用模型的命名空间

/另一种方法/

对我现有的方法不满意,我从 github 下载了 Microsoft Nuget Gallery 源代码,并意识到他们从未在 VIEWMODEL中使用过模型,这对我来说很有意义。我稍微更改了上面的代码(为了从 ViewModel 中删除 Model 的引用),发现它工作得很好。

这是我的更改:

型号 无变化,原样

View Model
1. 创建 YesNoTBDValue 类的 Replica 说YesNoTBDValueViewModel

2 在ProjectEditViewModel中使用此 ViewModel并删除模型引用

控制器更改填充这些值的方式。(在编辑操作中)

并在这些更改之后发现,它也可以正常工作。我喜欢第二种方法,因为在这个模型和视图模型中是完全分开的。保持这个问题开放以供进一步讨论。

如果我在这里遗漏了一些东西,请给我一些启发。

0 投票
5 回答
1615 浏览

c# - 如何在我的 MVC 项目之外重构我的数据库访问代码,但将我的视图模型保留在里面?

我有一个包含以下文件夹的 asp.net-mvc 网站:

  • 控制器
  • 脚本
  • 意见
  • 视图模型
  • 楷模
  • 领域模型

我现在想在另一个 .net 应用程序(一个 Windows 控制台应用程序,所以根本不是 Web)中访问很多这种业务逻辑和数据库访问代码和数据,所以我正在重构以尽可能多地删除 MVC 项目之外的东西和到解决方案中的其他项目中,以便可以与其他解决方案共享代码。

我有两个主要问题;

  1. 我的主要问题是我正在努力寻找一个放置生成 ViewModel 的代码的地方,因为我想在我的控制台应用程序中重用这些代码,因为控制台应用程序发送的电子邮件需要与看法。

  2. 另一个主要问题是,当我的许多实例化我的视图模型的函数都以一堆数据库访问代码开始时,我正在努力了解如何将我的数据库访问代码移出 MVC 项目,同时仍然拥有 ViewModel。

这是到目前为止的一些细节和我的过程:

第 1 步 - 将 DomainModel 移动到另一个项目中 - 成功

所以移动 DomainModel 项目很简单(因为那是很多原始对象,上面有一些业务逻辑 - 没有关于它的网络)。

第 2 步 - 精简控制器 - 成功

我已经尽可能地精简了我的控制器,并将任何业务逻辑或复杂的数据访问逻辑移到了 Models 文件夹中。当我尝试将模型文件夹移到 MVC 项目之外时,出现了一些问题:

第 3 步 - 尝试将模型文件夹移到 MVC 项目之外 - 挣扎

在细化控制器时,我有许多不同的控制器操作,它们转到模型类并返回我传递回视图的 ViewModel。像这样的东西(在我的控制器类中):

所以我的模型文件夹中的文件依赖于 ViewModel 类。我确实想集中 GenerateAppDetailViewModel() 函数,因为它在多个不同的控制器中使用。此外,在我的控制台应用程序(发送电子邮件)中,我经常想要获取恰好在某个视图上的所有数据,所以我的代码也“想要”利用视图模型......如果我将它移出 MVC 项目然后我可以重用,但我认为存在依赖问题(显然我的控制台应用程序中不需要 SelectListItem,但在其他情况下,它们只是生成我想要重用的视图所需的不同数据的容器对象)

或者另一件事是依赖于:

因为我有很多代码:

  1. 查询数据库中的表
  2. 将其转换为对象集合(我正在使用 nhibernate)
  3. 将其转换为某个 DTO 对象(位于 ViewModels 文件夹中)或 SelectListItem 对象列表(用于填充视图中的下拉菜单),这是 System.web.mvc 的一部分。

我想寻找关于打破这种依赖关系的最佳方法的建议,以便我可以将尽可能多的代码移出 MVC 项目以供重用。

问题是,如果我尝试将 ViewModel 代码吸入 Model 文件夹并进入另一个项目,那么我再次陷入困境,因为 ViewModel 类对

系统.Web.Mvc

由于 SelectListItem 之类的原因。

我应该有 2 个视图模型文件夹(一个在 MVC 项目中具有特定的 system.web.mvc 引用,另一个位于不同的项目中?)。似乎对 SelectListItem 的依赖是导致争用的原因

在我见过的大多数示例中,ViewModel 确实依赖于 System.Web.Mvc ,例如本教程

我看过这些问题:

这有点相关,但不确定它们是否回答了我所说的具体的整体重构问题。

0 投票
2 回答
4126 浏览

asp.net-mvc-4 - 如何将 ViewModel 传递回同一页面

我正在尝试让 HTTPPost 为视频页面的评论部分工作,但在回发时遇到了一些困难。保存正在记录到数据库中,但在重新加载页面时,我无法找到第一次找到的 @Model.SelectedMediaItem.Name 变量。我的html如下:

我的控制器操作如下:

当我从 URL /Media/Screencast/1 开始调用页面时,它会加载一个视图模型,其中填充了 SelectedMediaItem 的详细信息,并且所有内容都按预期显示。

当我尝试发回此内容时,尽管评论实际上已按预期保存,但我的视图模型详细信息正在丢失,我需要访问另一个页面并重新访问,然后才能看到。

如何在 @Html.BeginFor 中将我的视图模型作为附加参数传递?

我的视图模型如下:

0 投票
3 回答
2838 浏览

c# - Asp.net-mvc 将 ViewModel 传递给局部视图

这可能真的很愚蠢,但我就是想不通......

所以这就是问题所在。我有一个模型说 A 和一个模型 B。

现在,我有一个 B 的 ViewModel(但不是 A)。

所以,现在我有一个视图强类型到 A。它调用另一个局部视图 B 来呈现 B 的所有属性。但是现在,如何将 B 的视图模型传递给局部视图?我可以通过调用 Model.b 而不是 viewmodel 来传递模型!

0 投票
2 回答
916 浏览

asp.net-mvc-4 - ASP.NET MVC 在视图或控制器中设置文本

MVC(用于测试,SOC和脚手架)设置文本(例如页面标题,h1,h2 ..)的最佳实践是什么

在控件中执行此操作,填充视图模型并将其发送到视图或直接在视图中输入文本更好吗?

此外,我将适当地使用资源文件来处理全局文本(如按钮文本、菜单文本)和本地资源文件来查看特定文本。

0 投票
1 回答
1357 浏览

asp.net-mvc-4 - ListBoxFor 未在提交时完全更新视图模型

我已经能够像这样创建视图模型(请忽略它包含另一个视图模型,这将在我解决当前问题后修复:)):

我的控制器有一个编辑操作。在“GET”上,我通过 viewmodel 并正确显示,包括多选列表和预选值。但是当我“发布”“编辑”时,传回的 UserViewModel 的“AssignedRolesIds”和“AvailableRoles”为空,尽管其他所有内容都已填充。当我检查 FormCollection 对象时,有“AssignedRolesIds”作为键存在。

我的观点是这样的:

谁能告诉为什么只有与 ListBoxFor 相关的值不被传回(有一个空值)?

提前致谢