1

私は.net 4.5、MVC 4を使用しており、フォームにモデルバインダーを使用しています。エラーをリストとして表示する HTML 検証の概要がありますが、これは正常に機能します。

私がやりたいのは、単一のモデル プロパティが ModelState に基づいてエラーをトリガーしたかどうかを取得することです。その場合は、「エラー」CSS クラスを指定して赤にします。下記を参照してください。

<div class="controls">
@{
    // does this element have an error??
    if (Model.LastName == error)
    {
        @Html.ValidationMessageFor(x => x.LastName)
        @Html.TextBoxFor(x => x.LastName, new { type = "text", id = "LastName", name = "LastName", value = Model.LastName, @class = "Error" })
    }
    else
    {
        @Html.ValidationMessageFor(x => x.LastName)
        @Html.TextBoxFor(x => x.LastName, new { type = "text", id = "LastName", name = "LastName", value = Model.LastName, })
    }
}
}

検証の概要

@{
    if (ViewBag.Error != null && ViewBag.Error == true)
    {
        <div class="alert alert-error">
            <h3>Error</h3>
            <p>@ViewBag.Message</p>
            <p>@Html.ValidationSummary(false)</p>                
        </div>
    }
    else if (ViewBag.Error != null && ViewBag.Error == false)
    {
        <div class="alert alert-success">
            <h3 style="color:green;">Details Updated Successfully Received</h3>
            <p style="color:green;">@ViewBag.Message</p>
        </div>
    }
}

モデル

public class UpdateDetailsModel
{
    public VIPSessionObject VIPSessionObject { get; set; }

    [Required]
    [DataType(DataType.Text, ErrorMessage = "Please Enter your First Name")]
    public string FirstName { get; set; }

    [Required]
    [DataType(DataType.Text, ErrorMessage = "Please Enter your Last Name")]
    public string LastName { get; set; }

    [Required]
    [DataType(DataType.PhoneNumber, ErrorMessage = "Please Enter your Phone Number")]
    public string Telephone { get; set; }

    [Required]
    [DataType(DataType.EmailAddress, ErrorMessage = "Please Enter your Email Address")]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password, ErrorMessage = "Please Enter your Motorpoint VIP Password")]
    public string Password { get; set; }

    [Required]
    [DataType(DataType.Password, ErrorMessage = "The Passwords must match")]
    [Compare("Password")]
    public string PasswordConfirm { get; set; }

    [Required]
    [DataType(DataType.Date, ErrorMessage = "Please Enter your Date of Birth")]
    public DateTime DateOfBirth { get; set; }

    [Required]
    public int VehiclesInHousehold { get; set; }

    [Required(ErrorMessage = "Please select the number of cars in your household")]
    public int NoOfVehicles { get; set; }
}
4

4 に答える 4

3
@Html.ValidationMessageFor(model => model.LastName, null, new { @class = "error" })

次に、.error CSSクラスを赤いテキストでスタイル設定します。名前がモデルデータ注釈で指定されているものと一致しない場合は、モデルプロパティの注釈で提供されるエラーメッセージが使用されます。

于 2013-03-14T16:08:52.807 に答える
0

モデルでは、次のものをドロップできます。

 [DataType(DataType.Text, ErrorMessage = "Please Enter your Last Name")]

[必須] を次のように置き換えます。

 [Required(ErrorMessage ="Required Field")]

[DataType] 属性の使用にバグがあることを過去に読んだことがあります。現在、その記事を探すためにグーグルで検索しています。

于 2013-03-11T15:09:40.010 に答える
0

コントロールの手動 JavaScript (または JQuery) 検証はどうですか? 最も簡単な例:

function CheckForm()
{
    var elementValue = document.getElementById('elementId').Value;

    if(elementValue == null || elementValue == '')
    {
       document.getElementById('elementId').className = "Error";
    }
    else 
    {
       document.getElementById('elementId').className = "";
    } 
}

次に、フォームタグで使用できます

<form method="POST" action="..."> 
... 
<input id="elementId" type="text" ... />
<input type="submit" onClick="CheckForm()" .../>
</form>

任意の検証を実行できます。

また

@Robert のアドバイスに従って、Display、Required、DataType の ErrorMessage プロパティを設定します。

于 2013-03-13T22:10:28.660 に答える
0

あなたの問題が正確にはわかりませんが、新しい MVC 4 プロジェクトには検証ヘルパーのスタイルが付属しています。どうぞ:

 /* Styles for validation helpers
 -----------------------------------------------------------*/
 .field-validation-error {
   color: #f00;
 }

 .field-validation-valid {
   display: none;
 }

 .input-validation-error {
   border: 1px solid #f00;
   background-color: #fee;
 }

 .validation-summary-errors {
   font-weight: bold;
   color: #f00;
 }

 .validation-summary-valid {
   display: none;
 }

基本的に、フォームフィールドの検証が失敗した場合、次の条件を満たしていれば赤いテキストが表示されます。

 @Html.ValidationMessageFor(x => x.LastName)

検証する必要があるフォーム フィールドの横にある ビューモデルに配置したモデルとデータバリデーターは見栄えがします。

すべての Form ヘルパーには、HtmlAttributes というオプションのパラメーターがあり、これを介して、ページにレンダリングする任意の html 属性を渡すことができます。

 @Html.TextBoxFor(x => x.LastName, null, new {@class = "Error"})

class は C# の予約語であるため、そこにある @ 記号に注意してください...

于 2013-03-14T20:49:13.937 に答える