1

テキスト ボックスにさまざまなエラー メッセージを表示したいのですが、ビューのみを使用しており、検証にモデルを使用したくありません。

@Html.TextBox("txtFirst", "", htmlAttributes: new { @class = "required email" })

このフィールドは必須で、有効な電子メールである必要があります。上記で問題は解決しましたが、別の検証メッセージを表示できません。ユーザーが値を入力しない場合、エラー メッセージは「電子メール アドレスを入力してください」です。メールアドレスが無効な場合は、有効なメールアドレスを入力してくださいと表示されます。検証にモデルを使用したくないことに注意してください。ビューのみを使用したい。

4

2 に答える 2

1

基本的に、MVC パターンを回避すると、javascript を使用しないと探しているものを取得できません。これはうまくいくでしょう。

これを次または入力の下に配置して、エラーを表示します

@Html.Label("lblError", "")

<input type="submit" id="submitButton" value="Save Data" />

//Search By Entity Info
submitButton.onclick = function (event) {

    if(isNotEmpty(firstName)) {}; // for multiple fields, put them all into a separate call and return true only if they all are OK
    else {
        return false;
    }
}

//Validation Methods
function isNotEmpty(field) {
    var fieldData = field.value;
    if (fieldData == null || fieldData.length == 0 || fieldData == "") {
        field.className = "FieldError"; // this class "FieldError" would need to use styling CSS to give the field the look that it was in error
        var errorMessage = document.getElementById("lblError");
        errorMessage.Value = "Error - Your custom text here";
        return false;
    } 
}

これは単なる例であり、微調整が必​​要です

ただし、ViewModel を使用する場合は強くお勧めします。MVC 3 フレームワークではなく、そのままの HTML を使用することもできます。MVC を意図したとおりに使用しないことで、自分自身に不利益をもたらしています。

私が書かなければならなかったコードの量を見てください! また、ViewModel はクライアント側とサーバー側の検証を提供します。したがって、クライアント側のみに依存していて、誰かが無効なデータを送信したか、URL を介して直接データを投稿し、DB に不良データをプッシュして回避したからといって、やけどをすることはありません。

于 2012-05-20T22:05:35.033 に答える
0

データ注釈を使用したくないのはなぜですか?

クライアント側の検証のみに依存することはお勧めできません。ユーザーがブラウザー内で JavaScript を無効にしている可能性があるため、HTML5 フォーム検証の場合は古いブラウザーを使用している可能性があるためです。これは、ユーザーが無効なフォーム データを送信することにつながるだけです。クライアント側とサーバー側の検証を常に組み合わせて使用​​する必要があります。

ビュー モデルを作成し、データ注釈を有効にすることを強くお勧めします。たとえば、検証目的で必須属性とカスタム電子メール属性を使用することに注意してください。

[Required(ErrorMessage = "Please enter email address"]
[Email(ErrorMessage = "Please enter valid email")]
public string Email { get; set; }

メール検証属性の例:

public class EmailAttribute : RegularExpressionAttribute
{
    private const string EmailReg = @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$";

    public EmailAttribute() : base(EmailReg)
    {
    }
}

さて、あなたの質問によると、クライアント側の検証のみを使用したい場合は、HTML5 フォームの検証に頼るべきではありません。検証を有効にする簡単な方法は、jquery 検証プラグインを取得することです。

デモはこちら: http://jquery.bassistance.de/validate/demo/

于 2012-05-20T22:16:08.640 に答える