web-dev-qa-db-ja.com

ASP.NET MVCでintモデル検証のErrorMessageを変更するにはどうすればよいですか?

次のように定義されたプロパティを持つモデルがあります:

    [Required(ErrorMessage="Please enter how many Stream Entries are displayed per page.")]
    [Range(0,250, ErrorMessage="Please enter a number between 0 and 250.")]
    [Column]
    public int StreamEntriesPerPage { get; set; }

これは、ユーザーが「100q」などを入力しない限り機能します。次に、「値 '100q'はStreamEntriesPerPageでは無効です」というかなりいエラーが表示されます。

入力がintでない場合にデフォルトのエラーメッセージをオーバーライドするために使用できる属性はありますか?

28
quakkels

はい、 Data annotations extensions を使用して、プロパティを次のようにマークできます:

[Required(ErrorMessage = "Please enter how many Stream Entries are displayed per page.")]
[Range(0, 250, ErrorMessage = "Please enter a number between 0 and 250.")]
[Column]
[DataAnnotationsExtensions.Integer(ErrorMessage = "Please enter a valid number.")]
public int StreamEntriesPerPage { get; set; }
23
Feras Kayyali

追加してみてください

[RegularExpression("\\d+", ErrorMessage = "some message here")]

ブログ投稿を参照

9
Bala R

Ferasの提案によく似ていますが、外部依存関係はありません。

_using System;
using System.ComponentModel.DataAnnotations;

namespace MyDataAnnotations
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public class IntegerAttribute : DataTypeAttribute
    {
        public IntegerAttribute()
            : base("integer")
        {
        }

        public override string FormatErrorMessage(string name)
        {
            if (ErrorMessage == null && ErrorMessageResourceName == null)
            {
                ErrorMessage = "Enter an integer"; // default message
            }

            return base.FormatErrorMessage(name);
        }

        public override bool IsValid(object value)
        {
            if (value == null) return true;

            int retNum;

            return int.TryParse(Convert.ToString(value), out retNum);
        }
    }
}
_

次に、[Integer(ErrorMessage="...")]属性で装飾できます。

8

私は同じ問題を抱えていました、この解決策はそれを解決しました:

  • プロジェクトのApp_GlobalResourcesフォルダーを作成します(プロジェクトを右クリック->追加-> ASP.NETフォルダーの追加-> App_GlobalResources)。
  • そのフォルダーにresxファイルを追加します。 MyNewResource.resxと言います。
  • リソースキーPropertyValueInvalidを目的のメッセージ形式で追加します(たとえば、「コンテンツ{0}はフィールド{1}に対して無効です」)。 PropertyValueRequiredも変更する場合は、同様に追加します。
  • コードDefaultModelBinder.ResourceClassKey = "MyNewResource"をGlobal.asaxスタートアップコードに追加します。

from: ASP.NET MVCでデフォルトの検証エラーメッセージを変更する方法

6
tarn

これを試して:

[DataType(DataType.Currency, ErrorMessage ="......")]
public int YourProperty { get; set; }
1
Thien

ErrorMessageは私にとってRange-attributeでは機能しませんでした。最終的にRegularExpression属性を使用しました。

の代わりに:

[Range(0, 9, ErrorMessage = "...")]
public int SomeProperty { get; set; }

私が使用した:

[RegularExpression("^[0-9]$", ErrorMessage = "..."]
public int SomeProperty { get; set; }

他の範囲などの正規表現パターンは、次の場所にあります。 https://www.regular-expressions.info/numericranges.html

0
Per