在ASP.NET MVC 2中存储反馈UI数据的位置?

时间:2010-09-14 07:35:54

标签: model-view-controller design-patterns asp.net-mvc-2 coding-style

我通常都是ASP.NET MVC和MVC模式的新手。

对于上下文,我目前正在运行.NET 4.0,MVC 2。

我知道MCV 2有许多内置功能:

  • 验证(客户端和服务器端,通过各种方式)

  • 错误处理(通过属性和其他方法)

但应该用什么来向用户返回既不是错误也不是验证的反馈?

例如,我有一个简单的表单,它返回一个csv(使用 myController.base.file())找到IF数据。

如果找不到数据,我想返回带有模型的视图以及一条消息,例如 “找不到数据,尝试不同的日期范围”

现在,

这种反馈信息应该存储在模型本身吗?,还是

有更清洁的机制吗?

这是ModelStateDictionary的用途吗?

更新

只是为了澄清。我知道可能有很多方法可以做我想要的,但正确的MVC方式是什么

请记住反馈数据不是错误,我不想重定向到其他视图。

4 个答案:

答案 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的更“外国”部分制作黄金材料。
关于MVC M的真正aha时刻来自于阅读 Steve Michelotti的ASP.NET MVC View Model Patterns(全方位MVC2信息的重要来源)

答案 2 :(得分:1)

如果您正在讨论要在视图中的某个位置编写代码的消息,那么您应该在模型上使用该消息并让您的视图使用它。

如果您希望能够在应用程序中以相同的方式处理系统消息(例如,在窗口顶部或侧面显示消息),您可以创建一个实用程序方法,将信息放入ViewData中一个特殊的密钥,可以被您的母版页选中。如果您使用TempData,则可以通过重定向保留邮件。

答案 3 :(得分:1)

我之前已成功使用ModelState.AddModelError来显示摘要消息。只需确保使用的密钥不是模型字段名称。

注意:我已经从Steven Sanderson的书中调整了我的设计(参见RulesException的索引)

祝你好运