私はカスタム検証を使用しています、それは一つの値のための素晴らしい作品、しかし私は、例えば、複数の値をチェックする必要があります。MVC条件Vallidation RequiredIf
[RequiredIf(「カントリー」、「カナダ」、 "郵便番号が必要です")]
[必須]国、 "米国"、 "郵便番号が必要です"]
パブリック文字列PostalCode {get;セット; }
「RequiredIf」属性が重複しています。 ありがとうございます。
私はカスタム検証を使用しています、それは一つの値のための素晴らしい作品、しかし私は、例えば、複数の値をチェックする必要があります。MVC条件Vallidation RequiredIf
[RequiredIf(「カントリー」、「カナダ」、 "郵便番号が必要です")]
[必須]国、 "米国"、 "郵便番号が必要です"]
パブリック文字列PostalCode {get;セット; }
「RequiredIf」属性が重複しています。 ありがとうございます。
同じデータ注釈を1つのプロパティに2回適用することはできません。
現在のRequiredIfAttribute
コードがどのように見えるのかわかりませんが、選択した国をチェックし、それに応じてエラーメッセージを調整する別のカスタムバリデーターを作成する必要があります。
public class PostalCodeRequiredAttribute : ValidationAttribute
{
private const string errorMessage = "{0} is required.";
public string CountryPropertyName { get; private set; }
public PostalCodeRequiredAttribute(string countryPropertyName) : base(errorMessage)
{
CountryPropertyName = countryPropertyName;
}
public override string FormatErrorMessage(string name)
{
return string.Format(errorMessage, name);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null) return ValidationResult.Success;
var countryPropertyInfo = validationContext.ObjectType.GetProperty(CountryPropertyName);
string country = countryPropertyInfo.GetValue(validationContext.ObjectInstance, null).ToString();
// assuming your country property is bound to a string
string name;
if (country == "United States")
name = "Zip code";
else if (country == "Canada")
name = "Postal code";
else
return ValidationResult.Success;
// assuming postal code not required for all other countries
return new ValidationResult(FormatErrorMessage(name));
}
}
あなたはあなたの国のプロパティがCountry
呼ばれると仮定すると、次のように注釈を付けます:
[PostalCodeRequired("Country")]
public string PostalCode { get; set; }
あまりにもありがとう、残念ながら、それは動作しませんでした、ここでは国のプロパティです[必須] public string Country {get;セット; }。あなたは正しい郵便番号が他のすべての国で必要というわけではありません。 – hncl
具体的には機能しなかったものはありますか?コンパイル時にエラーがあったのか、それとも期待通りに検証しなかったのですか?このコードはサーバサイド検証用です。 – nightshifted
私は新しいシンプルなプロジェクトを作り、あなたのモデルを追加しました。問題は私の元のプロジェクトだと思う。どうもありがとうございます。 – hncl
だけ明確にするために - あなたは、エラーメッセージが選択されている国によって異なることがしたいのですが? – nightshifted
プロジェクトのビルド時に重複エラーが発生しました。はい、国によってエラーメッセージが表示されます。おかげで – hncl