0

我有一个模型类,我用它来创建表单

Public Class Users
    Public Property Id As Integer
    Public Property UserName As String
    Public Property UserNin As Int16
    Public Property UserType As String
    Public Property Password As String

    Property UserTypes As IEnumerable(Of SelectListItem) = {
            New SelectListItem With {.Value = "admin", .Text = "Admin"},
            New SelectListItem With {.Value = "doctor", .Text = "Doctor"},
            New SelectListItem With {.Value = "reception", .Text = "Receptionist"}
    }
End Class

我的 View 类,使用上面的 ViewModel 使用 HTML Helpers 生成表单

<% Using (Html.BeginForm("Create", "User", FormMethod.Post))%>
    <table>
        <tr>
            <td>
                User Name
            </td>
        </tr>
        <tr>
            <td>
                <%= Html.TextBoxFor(Function(x) x.UserName)%>
            </td>
        </tr>
        <tr>
            <td>
                User NIN
            </td>
        </tr>
        <tr>
            <td>
                <%= Html.TextBoxFor(Function(x) x.UserNin)%>
            </td>
        </tr>
        <tr>
            <td>
                Password
            </td>
        </tr>
        <tr>
            <td>
                <%= Html.PasswordFor(Function(x) x.Password)%>
            </td>
        </tr>
        <tr>
            <td>
                <%= Html.DropDownListFor(Function(x) x.UserType, Model.UserTypes)%>
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="Add New User" />
            </td>
        </tr>
    </table>
<% End Using%>

现在为这种情况添加验证的最佳方法是什么?


更新:

这是我在另一种情况下尝试过的,但我仍然没有看到任何验证,该操作被调用并处理。

这是我的模型课

Public Class LoginUser
    <Required()>
    Public Property UserName As String

    <Required()>
    <StringLength(8)>
    Public Property Password As String

End Class

这是部分视图

<% Using (Html.BeginForm("Login", "User", FormMethod.Post))%>
<% Html.EnableClientValidation()%>
<table ID="loginTable" runat="server">
    <tr>
        <td>
            <label for="username">UserName</label>
        </td>
    </tr>
    <tr>
        <td>
            <%= Html.TextBoxFor(Function(x) x.UserName)%>
            <%= Html.ValidationMessageFor(Function(x) x.UserName) %>
        </td>
    </tr>
    <tr>
        <td>
            <label for="password">Password</label>
        </td>
    </tr>
    <tr>
        <td>
            <%= Html.TextBoxFor(Function(x) x.Password)%>
            <%= Html.ValidationMessageFor(Function(x) x.Password)%>
        </td>
    </tr>
    <tr>
        <td>
            <input type="submit" value="Login" />
        </td>
    </tr>
</table>
<% End Using%>

登录操作

<HttpPost()>
Function Login() As ActionResult
    If ModelState.IsValid Then
        Dim sql As String
        Dim username As String = Request.Form("username").ToString
        Dim password As String = Request.Form("password").ToString
        Dim dbHelper As New DBHelper(False)

        sql = "SELECT * FROM " & _tblName & " WHERE username = '" & username & "' and password = '" & password & "'"
        Try
            Dim dr As DataRow = dbHelper.ExecuteAndGetRow(sql)

            If Convert.ToInt16(dr.Item(0).ToString) > 0 Then
                Dim nin As String = dr.Item(4)
                Session("loggedin") = 1
                Session("logged") = dr.Item(0)
                Session("logged_nin") = dr.Item(4)
                ViewData("message") = "Login Successful"
                ViewData("show_loginForm") = False
            Else
                ViewData("message") = "Login failed"
                ViewData("show_loginForm") = True
            End If
        Catch ex As Exception
            ViewData("message") = "Login failed"
            ViewData("show_loginForm") = True
        End Try


        Return View()
    Else
        Return View()
    End If
End Function
4

1 回答 1

1

您可以使用数据注释。例如,如果该字段是必需的,则使用以下属性UserName对其进行装饰:<Required>

<Required>
Public Property UserName As String

并在视图中为错误消息放置一个相应的占位符:

<%= Html.TextBoxFor(Function(x) x.UserName) %>
<%= Html.ValidationMessageFor(Function(x) x.UserName) %>

或者,如果您想将所有错误消息集中在一个地方,您可以使用 ValidationSummary 助手:

<%= Html.ValidationSummary() %>

ModelState.IsValid在 POST 控制器操作中,您可以使用布尔属性验证模型是否有效:

<HttpPost()>
Function Create(model As Users) As ActionResult
    If ModelState.IsValid Then
        ' validation succeeded => do some processing and redirect
        Return RedirectToAction("Create")
    End If

    ' validation failed => redisplay the same view so that the user
    ' can fix the errors
    Return View(model)
End Function

这是MSDN 上的一篇文章,它也解释了这一点。

于 2012-08-23T08:24:13.317 回答