次のように定義されたプロパティを持つモデルがあります:
[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でない場合にデフォルトのエラーメッセージをオーバーライドするために使用できる属性はありますか?
はい、 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; }
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="...")]
属性で装飾できます。
私は同じ問題を抱えていました、この解決策はそれを解決しました:
App_GlobalResources
フォルダーを作成します(プロジェクトを右クリック->追加-> ASP.NETフォルダーの追加-> App_GlobalResources)。MyNewResource.resx
と言います。PropertyValueInvalid
を目的のメッセージ形式で追加します(たとえば、「コンテンツ{0}はフィールド{1}に対して無効です」)。 PropertyValueRequiredも変更する場合は、同様に追加します。DefaultModelBinder.ResourceClassKey = "MyNewResource"
をGlobal.asaxスタートアップコードに追加します。これを試して:
[DataType(DataType.Currency, ErrorMessage ="......")]
public int YourProperty { get; set; }
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