web-dev-qa-db-ja.com

html.ValidationMessageForの使用方法

ユーザーが無効なもの(数字が必要な文字列など)を入力した場合、テキストボックスの横にエラーメッセージを表示するようにビューを取得しようとしています。代わりに、ユーザーが送信を押すと検証が失敗したというsayingいエラーページが表示されます。

これが私の見解の一部です。

@model MembershipTest.ViewModels.AddDriverViewModel

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Add Drivers";
}

@using (Html.BeginForm("AddDriver", "Driver"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
<legend>Customer Information</legend>
 <table>
     <tr>
         <td>
             @Html.Label("First Name:")
             @Html.TextBoxFor(m => m.Driver.F_Name)
             @Html.ValidationMessageFor(m => m.Driver.F_Name)
         </td>
         <td>
             @Html.Label("Gender:")

             @Html.RadioButtonFor(m => m.isMaleChecked, "true") Male
             @Html.RadioButtonFor(m => m.isMaleChecked, "false")Female
         </td>
     </tr>
     <tr>
         <td>
             @Html.Label("Last Name:")
             @Html.TextBoxFor(m => m.Driver.L_Name)
             @Html.ValidationMessageFor(m => m.Driver.L_Name)
         </td>

そして、ここに私のモデルの関連部分があります:

[Required]
[StringLength(30)]
public string F_Name { get; set; }

[Required]
[StringLength(30)]
public string L_Name { get; set; }

コントローラーのpostメソッドでは、必ず使用します

if (ModelState.IsValid)

ユーザーが名前のテキストボックスに50文字のような文字を入力した場合、Html.ValidationMessageFor()を使用してそのテキストボックスからタブで移動するときにエラーを表示して、押す前に確認できるようにします送信します。これを実現するjqueryがありませんか?たぶん私が含める必要のあるステートメントを使用していますか?

20
SantasNotReal

それはばかげてシンプルでした..... [必須]デコレータの一部としてErrorMessageフィールドを追加しませんでした。例えば:

[Required(ErrorMessage = "First name is required")]
[StringLength(30, ErrorMessage = "Name can be no larger than 30 characters")]
public string F_Name { get; set; }

[Required(ErrorMessage = "Last name is required")]
[StringLength(30, ErrorMessage = "Name can be no larger than 30 characters")]
public string L_Name { get; set; }

現在、ユーザーが名前フィールドに何も入力しない場合、または30文字を超える文字を入力した場合、Postメソッドは実行されず、ユーザーに何が間違っているかを伝える小さなメッセージが表示されます。

39
SantasNotReal