我通常都是ASP.NET MVC和MVC模式的新手。
对于上下文,我目前正在运行.NET 4.0,MVC 2。
我知道MCV 2有许多内置功能:
验证(客户端和服务器端,通过各种方式)
错误处理(通过属性和其他方法)
但应该用什么来向用户返回既不是错误也不是验证的反馈?
例如,我有一个简单的表单,它返回一个csv(使用 myController.base.file())找到IF数据。
如果找不到数据,我想返回带有模型的视图以及一条消息,例如 “找不到数据,尝试不同的日期范围”
现在,
这种反馈信息应该存储在模型本身吗?,还是
有更清洁的机制吗?
这是ModelStateDictionary的用途吗?
请记住反馈数据不是错误,我不想重定向到其他视图。
答案 0 :(得分:2)
我认为可以清除空气的是 ViewModel 的想法。除了最简单的场景,您将在项目中找到多个种模型。他们可以使用许多名称,但我发现这些名称很有用:
纯域模型(模型)
这是您对我们的数据模型进行理想表示的地方。
应用程序模型(ViewModels)
这些模型说明了在视图中显示域模型的现实情况。它们包含特定视图特别需要的数据。在这种模型中放置类似状态消息的东西是完全可以接受的。
我建议this insightful blog post显示何时,为何以及如何使用ViewModels。
示例:
public class WidgetDataExportViewModel {
public DateTime StartDate {get;set;}
public DateTime EndDate {get;set;}
public MyEnum SomeOtherProperty {get;set;}
public string StatusMessage {get;set;}
public IEnumerable<Widget> Widgets {get;set;}
}
答案 1 :(得分:1)
直接源于您模型上的用户操作的验证错误(例如密码太短)
在家里尽可能接近模特。
通过使用某种专用的错误视图,可以更轻松地解决“找不到数据”类型的常规错误消息。
<小时/> 已添加:
如果我理解你是对的,你更喜欢坚持一个观点;无论是验证黄金还是刻录SQL服务器; - )
不是疯狂的MVC2经历了mysef,但是保持一致并始终创建自己的模型,从来没有你可能通过什么(不是)你正在使用的ORM服务(Linq&lt; - &gt; SQL,EF)应该给你带来的好处 - 你需要的颗粒感。
如果我的记忆对我有用,我认为Nerddinner可能具有启发性;如果你真的 想要冒险,为什么不去Deep Inside ASP.NET MVC 2 Model Metadata and Validation
<小时/> 我的MVC主要来自书籍,但博客圈已经开始在ASP.NET MVC的更“外国”部分制作黄金材料。
答案 2 :(得分:1)
如果您正在讨论要在视图中的某个位置编写代码的消息,那么您应该在模型上使用该消息并让您的视图使用它。
如果您希望能够在应用程序中以相同的方式处理系统消息(例如,在窗口顶部或侧面显示消息),您可以创建一个实用程序方法,将信息放入ViewData中一个特殊的密钥,可以被您的母版页选中。如果您使用TempData,则可以通过重定向保留邮件。
答案 3 :(得分:1)
我之前已成功使用ModelState.AddModelError来显示摘要消息。只需确保使用的密钥不是模型字段名称。
注意:我已经从Steven Sanderson的书中调整了我的设计(参见RulesException的索引)
祝你好运