C# ASP.MVC 3.0中的验证

C# ASP.MVC 3.0中的验证,c#,asp.net,asp.net-mvc-3,validation,C#,Asp.net,Asp.net Mvc 3,Validation,我有一个模型课: public class YearlyChageRate { public int Year { get; set; } public double Rate { get; set; } } 我想检查Yeae是唯一的还是否,以及in-condition Year不是唯一的应用程序是否向用户显示错误消息。我如何检查Year字段是否重复?您可以在视图模型上使用validation属性。您可以在视图模型上使用validation属性。以下是一个很好的示例: 这里也

我有一个模型课:

public class YearlyChageRate
{
    public int Year { get; set; }
    public double Rate { get; set; }
}
我想检查Yeae是唯一的还是否,以及in-condition Year不是唯一的应用程序是否向用户显示错误消息。我如何检查Year字段是否重复?

您可以在视图模型上使用validation属性。

您可以在视图模型上使用validation属性。

以下是一个很好的示例:

这里也是:

您可以在模型中使用Remote属性来检查数据库中的唯一值

这是远程属性的官方示例:

还有一个:

这是一个很好的例子:

这里也是:

您可以在模型中使用Remote属性来检查数据库中的唯一值

这是远程属性的官方示例:


还有一点:

尽管可以使用DataAnnotations属性进行验证,也可以使用
[Remote]
属性对DB进行检查,但这不是一个很好的设计选择

让我解释一下:

  • 数据访问是一个数据层问题
  • 验证是业务层的事情
  • 用户输入和反馈是一个ui问题
有了DataAnnotations,您就可以将三合一。它可以更快,但肯定不是精心设计的

您可以尝试更严格的方法,如:

  • 在业务级别有一个方法,该方法将对象作为参数,使用Choice的验证框架在内部执行验证
  • 此方法将仅在验证通过时调用数据访问来持久化对象
  • 此方法将始终将已验证的对象返回到UI,如果有任何内容未验证,则返回一组字段/错误
  • 在ui中读取方法的输出时,如果没有错误,则可以显示成功页面,或者在返回验证错误的情况下重新显示表单。为此,强烈建议使用
    PRG模式
    ,因为您不应该在
    POST
    方法上显示页面。谷歌搜索
    PRG模式
    ,了解更多信息。MvcContrib有一个很好的
    ActionFilter
    ,名为
    ModelStateToTempData
    ,使PRG模式的实现变得简单

尽管可以使用DataAnnotations属性进行验证,也可以使用
[Remote]
属性进行DB检查,但这不是一个很好的设计选择

让我解释一下:

  • 数据访问是一个数据层问题
  • 验证是业务层的事情
  • 用户输入和反馈是一个ui问题
有了DataAnnotations,您就可以将三合一。它可以更快,但肯定不是精心设计的

您可以尝试更严格的方法,如:

  • 在业务级别有一个方法,该方法将对象作为参数,使用Choice的验证框架在内部执行验证
  • 此方法将仅在验证通过时调用数据访问来持久化对象
  • 此方法将始终将已验证的对象返回到UI,如果有任何内容未验证,则返回一组字段/错误
  • 在ui中读取方法的输出时,如果没有错误,则可以显示成功页面,或者在返回验证错误的情况下重新显示表单。为此,强烈建议使用
    PRG模式
    ,因为您不应该在
    POST
    方法上显示页面。谷歌搜索
    PRG模式
    ,了解更多信息。MvcContrib有一个很好的
    ActionFilter
    ,名为
    ModelStateToTempData
    ,使PRG模式的实现变得简单

您希望在何处执行此检查?一年是独一无二的,这意味着什么?独特的哪里?在数据库或其他地方?是,在数据库中是唯一的,我想在服务器端签入并向用户显示消息。您想在哪里执行此检查?一年是独一无二的,这意味着什么?独特的哪里?在数据库或其他什么东西中?是的,在数据库中是唯一的,我想在服务器端签入并向用户显示一条消息。