52

これは私のモデルです:

namespace MvcApplication2.Models
{
    public class CreditCard
    {
        [CreditCard(ErrorMessageResourceType = typeof(Messages), ErrorMessageResourceName = "CardNumberInvalid")]
        public string CardNumber { get; set; }
    }
}

これは私の Messages.resx です:

名前 値

CardNumberInvalid カード番号が正しいことを確認してください

そして、これは私の見解です:

@model MvcApplication2.Models.CreditCard
@Html.TextBoxFor(m => m.CardNumber);

MVC バージョン 3 では、これはエラーなしで機能します。MVC 4 でこのページに移動すると、「ErrorMessageString または ErrorMessageResourceName のいずれかを設定する必要がありますが、両方を設定する必要はありません」という例外が表示されます。これは、CreditCardAttribute でのみ発生します。RequiredAttribute などの他の検証属性は正常に機能します。ErrorMessageResourceName のみを設定しました。ErrorMessageString を設定していないため、何が間違っているのかわかりません。誰でも助けてもらえますか?

4

9 に答える 9

153

これは、.Net 4.5 の既知の問題です。「ErrorMessage = null」という名前のパラメーターを追加すると、これを解決できます。

参照: 参照リンクは現在壊れています。 http://connect.microsoft.com/VisualStudio/feedback/details/757298/emailaddress-attribute-is-unable-to-load-error-message-from-resource-mvc

于 2012-09-19T03:47:06.223 に答える
10

プロパティを自動的RequiredAttributeAdapterに設定する を実装していたため、この問題が発生しました。ErrorMessageResourceName

以下を設定する前に、ErrorMessage プロパティが設定されているかどうかを確認することで修正できますErrorMessageResourceName

/// <summary>
/// Creates a new instance of the RequiredAttributeAdapter, used for switching the default required message
/// format
/// </summary>
public CustomMessageRequiredAttributeAdapter(
    ModelMetadata metadata,
    ControllerContext context,
    RequiredAttribute attribute
)
    : base(metadata, context, attribute)
{
    if (string.IsNullOrEmpty(attribute.ErrorMessage))
    {
        attribute.ErrorMessageResourceType = typeof (ValidationMessages);
        attribute.ErrorMessageResourceName = "PropertyValueRequired";
    }
}
于 2013-04-25T09:44:41.660 に答える
1

カスタム検証属性を使用していて、ローカリゼーションのためにリソースからエラー メッセージを読み込もうとしている人は誰でもこの問題に直面するので、ここで私の回避策を共有します。
このようなカスタム検証属性があると仮定します

[FileTypeMustBe("jpg")]
public HttpPostedFileBase MyFile {get; set;}

カスタム検証属性にこのコードを追加します

public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentCulture,
          ErrorMessageString, name, ValidFileType);
    }

ValidFileType は、カスタム検証属性 (ここでは jpg) の入力引数を取るプロパティの名前です。これで、モデル プロパティを好きなように装飾できます。

[FileTypeMustBe("jpg", ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "WrongFileTypeError")]
public HttpPostedFileBase MyFile {get; set;}

ErrorMessage=nullご覧のとおり、カスタム検証クラスで処理したため、追加する必要はありません。カスタム検証でエラーメッセージ文字列を初期化した場合は忘れないでください。今すぐ削除してFormatErrorMessage代わりに使用する必要があります。

于 2016-04-27T02:00:39.890 に答える
0

交換する

[Required(ErrorMessage = "")]

[Required()]

私にとってはうまくいきましたが、 ErrorMessageを空白の文字列で保持する意味もありません

于 2020-11-11T05:56:09.177 に答える
-1

ローカライズしているプロパティで同じ問題が発生しました。ErrorMessageResourceType を定義してから ErrorMessageResourceName を定義しましたが、誤って ErrorMessage 属性も設定し、例外がスローされました

[NotEqualTo("User_Name", ErrorMessageResourceType = typeof(LROResources.Global), ErrorMessageResourceName = "UserPasswordCannotBeUsername", ErrorMessage = "The password cannot be the same as your Username.")]

したがって、私の場合は、削除するだけErrorMessageで問題が解決しました。

于 2013-02-18T17:11:53.403 に答える