【问题标题】:ASP.NET MVC - How do I implement validation when using Data Repositories? (Visual Basic)ASP.NET MVC - 使用数据存储库时如何实现验证? (Visual Basic)
【发布时间】:2010-06-15 03:24:55
【问题描述】:

我已经构建了一个 UserRepository 接口来与我的 LINQ to SQL 数据层进行通信,但我正试图弄清楚如何实现验证。

这是我的 AddUser 子例程的样子

Public Sub AddUser(ByVal about As String, ByVal birthdate As DateTime, ByVal openid As String, ByVal regionid As Integer, ByVal website As String) Implements IUserRepository.AddUser
    Dim user = New User
    user.About = about
    user.BirthDate = birthdate
    user.LastSeen = DateTime.Now
    user.MemberSince = DateTime.Now
    user.OpenID = openid
    user.RegionID = regionid
    user.UserName = String.Empty
    user.WebSite = website

    dc.Users.InsertOnSubmit(user)
    dc.SubmitChanges()
End Sub

然后我的控制器将简单地调用AddUser(...)

但我对如何在此实现客户端和服务器端验证一无所知。
(我想我更喜欢使用 jQuery AJAX 并在服务器上进行所有验证,但我完全愿意接受意见)

编辑:

@vijaysylvesteranswer 非常完美,我只是想展示一个代码示例来说明我是如何实现它的。

UserService.vb

Imports System.ComponentModel.DataAnnotations

Namespace Domain

    <MetadataType(GetType(UserMetaData))> _
    Partial Public Class User : End Class

    Public Class UserMetaData

        <Required(ErrorMessage:="Username is required.")> _
        <StringLength(30, ErrorMessage:="Username cannot exceed 30 characters.")> _
        Public UserName As String

        <StringLength(50, ErrorMessage:="Email Address cannot exceed 50 characters.")> _
        <RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9+)*\\.([a-z]{2,4})$", ErrorMessage:="Not a valid email address.")> _
        Public Email As String

        <StringLength(256, ErrorMessage:="Web Address cannot exceed 256 characters.")> _
        Public WebSite As String

        <StringLength(4000, ErrorMessage:="Profile cannot exceed 4000 characters.")> _
        Public About As String

    End Class

#Region "Interface"
    Public Interface IUserService
        Sub UpdateUser(ByVal id As Integer, ByVal about As String, ByVal birthdate As DateTime, ByVal openid As String, ByVal regionid As Integer, ByVal username As String, ByVal website As String)
        Sub UpdateUserReputation(ByVal id As Integer, ByVal AmountOfReputation As Integer)
        Sub CloseUser(ByVal id As Integer)
        Sub OpenUser(ByVal id As Integer)
        Function GetAllUsers() As IList(Of User)
        Function GetUserByID(ByVal id As Integer) As User
    End Interface
#End Region


#Region "Service"
    Public Class UserService : Implements IUserService

        Private _UserRepository As IUserRepository

        Public Sub New(ByVal UserRepository As IUserRepository)
            _UserRepository = UserRepository
        End Sub

        Public Sub UpdateUser(ByVal id As Integer, ByVal about As String, ByVal birthdate As Date, ByVal openid As String, ByVal regionid As Integer, ByVal username As String, ByVal website As String) Implements IUserService.UpdateUser
            Dim user = _UserRepository.GetUserByID(id)
            user.About = about
            user.BirthDate = birthdate
            user.RegionID = regionid
            user.UserName = username
            user.WebSite = website

            _UserRepository.UpdateUser(user)
        End Sub

        ''# And the rest of my methods.
    End Class
End Namespace

【问题讨论】:

    标签: asp.net-mvc vb.net validation repository


    【解决方案1】:

    虽然在服务器端和客户端手动进行验证是有意义的,我会说可以使用 XVal 等开源验证框架。

    查看下面的链接。

    XVal reference

    就像配置需要验证的属性一样简单。

    例如,

    [Required] [StringLength(50)] public string Name { get; set; }
    

    上面的代码 sn-p 检查 Name 是否是一个有效的字符串并且它的大小不超过 50。

    有许多内置验证器(包括正则表达式),我们可以将它们用于不同的数据类型,例如日期。

    希望这会有所帮助。

    谢谢, 维杰。

    【讨论】:

    • 那么我在哪里设置这些属性?在我的存储库中还是使用 DBML 中的现有属性?
    • 您可以在 Controller 本身中设置属性,但是当您尝试在存储库中 SubmitChanges() 时,会发生验证并将异常抛出到控制器,您可以在其中进行适当的处​​理。
    • 谢谢,我整理好了。我发布了我的解决方案来帮助下一个人。
    • 附带说明,我没有使用 XVal,我只是使用内置的所有内容。有没有一种简单的方法可以使用内置的 .NET 实现客户端验证(类似于 XVal)东西?
    • 看来我找到了问题的答案。 dotnetaddict.dotnetdevelopersjournal.com/…
    【解决方案2】:

    创建用户模型的部分类并为您的输入添加验证。如果您已经在视图中创建了用于验证的 html 帮助程序(通常在创建新的强类型视图时自动完成),那么您可以在控制器中放置一个 try catch 语句来捕获错误并通过模型状态将它们传递回视图.

    看看这个:http://www.asp.net/mvc/tutorials/validation-with-the-data-annotation-validators-cs

    似乎比我的句子解释得更好......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-02
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多