9

エラーメッセージを送り返さない RequiredAttribute の拡張クラスがあります。デバッガーで確認すると、テキストは問題ありません。

public class VierRequired : RequiredAttribute
{
    public VierRequired(string controlName)
    {
        //...
    }

    public string VierErrorMessage
    {
        get { return ErrorMessage; }
        set { ErrorMessage = value; }
    }

    // validate true if there is any data at all in the object
    public override bool IsValid(object value)
    {
        if (value != null && !string.IsNullOrEmpty(value.ToString()))
            return true;

        return false; // base.IsValid(value);
    }
}

私はこう呼んでいます

[VierRequired("FirstName", VierErrorMessage = "Please enter your first name")]
public string FirstName { get; set; }

そしてmvc-view

<%: Html.TextBoxFor(model => model.FirstName, new { @class = "formField textBox" })%>
<%: Html.ValidationMessageFor(model => model.FirstName)%>

通常の Required アノテーションを使用すると機能します

[Required(ErrorMessage = "Please enter your name")]
public string FirstName { get; set; }

しかし、カスタムはエラーメッセージを送り返しません

4

1 に答える 1

30

の独自の派生物を作成したときに、クライアント側の検証にも問題がありましたRequiredAttribute。これを修正するには、次のようにデータ注釈を登録する必要があります。

DataAnnotationsModelValidatorProvider.RegisterAdapter(
            typeof(VierRequired),
            typeof(RequiredAttributeAdapter));

メソッドでこれを呼び出すだけでApplication_Start()、クライアント側の検証は通常どおり機能するはずです。

フォームをPOSTしているときに属性が機能しない場合は、属性のロジックに問題があることを示しています(IsValidメソッドを確認してください)。また、派生データの注釈で何を達成しようとしているのかもわかりません。あなたのロジックは、とにかくデフォルト属性が行うことをほぼ実行しようとしているように見えます。

MSDNのドキュメントから引用:

プロパティがnullの場合、空の文字列( "")が含まれている場合、または空白文字のみが含まれている場合は、検証例外が発生します。

于 2012-09-24T22:01:08.543 に答える