问题标签 [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.
c# - ASP.NET MVC3 ViewModel - 困惑
我正在学习 C# ASP.NET MVC 3 中的 ViewModels,但我一直坚持在我的视图中显示来自 ViewModel 的数据。
型号:_
在我的索引视图中,我想显示作者和书籍的一般列表。我为此制作了一个ViewModel:
这是控制器中我的Index() 操作方法:
我有一个强类型的索引视图,我想在其中显示作者列表:
这是Model.Authors部分不起作用。当我键入模型时。并等待 IntelliSense 显示作者,它未列出。错误描述是:
“System.Collections.Generic.IEnumerable”不包含“Authors”的定义,并且找不到接受“System.Collections.Generic.IEnumerable”类型的第一个参数的扩展方法“Authors”(您是否缺少 using 指令还是汇编参考?)
asp.net-mvc - MVC ViewModel 使用列表
我有一个使用列表和字符串值的视图。
目前我正在执行以下操作并将其传递给视图:
如您所见,目前我正在将注释(这是一个列表)传递给视图,然后将直接在我的视图中获取 ViewBag。
我喜欢做的是为此创建一个视图模型。我想知道为我需要的东西创建视图模型的最佳实践是什么。
这是我为 ViewModel 提出的:
我有点迷失在哪里创建您在 中看到的 Notes,我是否创建了另一个在不同文件中IEnumerable<Notes>
调用的类,以及如何为其分配适当的类型。将代表 LINQ 查询。Notes
.cs
asp.net-mvc - 带有表对象的 MVC c# ViewModel
我有一个这样的视图模型
在我的控制器中,我在构建之后执行以下操作,以便我的控制器知道视图模型:
我收到以下错误:
{“你调用的对象是空的。”}
asp.net-mvc-3 - 无法填充 ViewModel
MVC3 项目。
我有几个类:我在视图模型中设置的帐户、地址、电话等
在控制器 GET 操作中,我只是调用视图
在视图中我通过视图模型
然后我使用@Html.EditorFor 填充所有字段并成功地将其传递给 POST 操作并在数据库中创建记录。所以所有这些代码都在工作。
当我尝试预先填充一些属性时,问题就出现了。我在 GET 操作中执行以下操作。
代码通过了 Intellisense,但是当我运行时,我得到“用户代码未处理 NullReferenceException - 对象引用未设置为对象的实例”错误。
如果我尝试使用视图中的代码进行填充,我会得到同样的错误。
我需要能够以编程方式填充控制器和视图中的属性。我已经阅读了几篇关于如何在控制器中填充视图模型并在它们上建模我的代码的 SO 帖子,但由于某种原因我的代码无法正常工作。我在这里做错了什么?我应该如何在控制器和视图中处理它?我知道对象在创建时为空,但不知道如何解决这个问题。
谢谢
asp.net-mvc-3 - 使用 ViewModel 时不显示 MVC3 自定义验证错误消息
概括
Question:
为什么使用 ViewModel 时不显示自定义验证错误消息。
Answer:
自定义验证应应用于 ViewModel 而不是 Class。有关示例代码,请参阅@JaySilk84 答案的结尾。
MVC3,项目使用
- jquery-1.7.2.min.js
- 现代主义-2.5.3.js
- jquery-ui-1.8.22.custom.min.js(由 jQuery.com 为 Accordion 插件生成)
- jquery.validate.min.js 和
- jquery.validate.unobtrusive.min.js
我在我的项目中对 View 中的 dataannotations 和 Controller 中的 ModelState.AddModelError 进行了验证,所以我知道我已经正确配置了所有验证代码。
但是使用自定义验证会在代码中生成错误,但不会显示错误消息。
在 POST 操作中深入调试,自定义验证会导致模型状态失败,并且错误消息被放置在正确的值字段中,但是当模型被发送回视图时,错误消息不会显示。在控制器中,我也有 ModelState.AddModelError 代码,并且它的消息确实显示。对于一个工作而不是另一个工作,如何以不同的方式处理?如果不是这样,还有什么会阻止错误消息显示?
更新 1:
我正在使用 ViewModel 在视图中创建模型。我删除了 ViewModel 并开始显示错误消息,只要我将 ViewModel 添加回消息中,就会再次停止显示。有没有人成功使用 ViewModel 的自定义验证?有什么你需要做的额外工作才能让它工作吗?
更新 2:
我用这两个简单的类(Agency 和 Person)创建了一个新的 MVC3 项目。
这是控制器代码
风景
视图模型
当视图中仅显示代理时,将显示验证错误(18 岁以下的 DOB)。当 ViewModel 出现时,错误不会显示。自定义验证始终会捕获错误并导致 ModelState.IsValid 失败并重新呈现视图。任何人都可以复制这个吗?关于为什么以及如何解决的任何想法?
更新 3:
作为一种临时解决方法,我通过向 ValidationResult 添加一个参数,将 Validation 更改为一级字段(相对于模型一级):
现在的问题是错误消息显示在字段旁边而不是表单顶部(这在手风琴视图中不好,因为用户将返回到表单而没有可见的错误消息)。为了解决这个次要问题,我将此代码添加到控制器 POST 操作中。
问题仍未得到解答,为什么 ViewModel 不显示模型级错误消息(有关此内容的更多信息,请参阅我对 JaySilk84 的回复)?
c# - 局部视图中呈现的模型属性值不正确
我有一个强类型的局部视图,其模型包含与父页面的视图模型同名的属性。由于某种原因,渲染引擎正在渲染父视图模型值,而不是预期值(嗯,至少是我期望的值!)
父页面视图模型提取:
子页面视图模型提取:
父页面提取(Razor):
部分视图提取:
所以基本上在我的渲染输出中,我的隐藏字段具有父视图模型元素的值,而不是传递给局部视图的值。这肯定是由名称引起的,因为将 @ChildViewModel.Id@ 的名称更改为 @ChildViewModel.ChildId@ 使其按预期工作。有趣的是,在调试器中检查视图模型值时,我确实看到了正确的值;只有渲染的输出是错误的。
有没有办法绕过这个或“正确”的方式来做我想做的事情(我在表格中呈现迷你表单以进行 ajax 验证/发布对表格行的更新)
谢谢,
蒂姆
asp.net-mvc-3 - 在 ASP.NET MVC 3 中用于多个文件上传的 ViewModel
我有多个文件上传Views
,ViewModel
绑定如下:
带有数据注释的视图模型,用于验证允许扩展的文件上传,如下所示:
控制器:用于保存多个文件并在存在错误时返回视图
问题说明 如何为这五个文件上传输入控件定义视图模型,以便在不允许上传文件的文件扩展名类型时显示相应的错误以显示相应的验证错误。对于所有五个文件上传控件,我只有一个视图模型项。
为那些显示各自验证错误的多个文件上传控件定义视图模型的最佳方法是什么,而不是用户尝试上传不允许扩展名的文件???
c# - 使用数据注释验证 viewmodel 的单个属性
我正在尝试使用视图模型和数据注释构建多个文件上传。以下是视图模型:
问题: 在这里,我想检查单个属性的模型状态以显示单个验证错误中的错误。我不知道要检查个人,而对于我们使用ModelState.IsValid的所有视图模型,我有以下操作:
看法:
asp.net-mvc - 控制使用视图模型生成的表单元素的默认值和格式
我正在使用模型类生成表单元素,如下所示
当我将此视图模型传递给视图页面时,一些值已经作为默认值存在,但它们是无效的。
喜欢PatientNin
我用
当表单被渲染时,它会得到0
一个默认值,这是不需要的。如何控制这样的默认值?
在上述情况下,同样的情况发生BookingDate
在我得到的文本框中1/1/0001 12:00:00 AM
哪个格式不正确和不需要的默认值?
如何解决这样的问题?
asp.net-mvc - 传递值以在 Asp.net MVC3 中查看
我有两张表日期和歌曲。其中 DateId 是 Song 表的外键。
这是功能:
我需要显示:
Date SongId Title
在视图中。但返回视图只采用一个参数。有没有办法将两个表数据都传递给查看?