0

コードの国際化に問題があります。コードのこの部分を除いて、私のサイトのどこでもうまく機能します。

[DataType(DataType.Password)]
    [Display(ResourceType = typeof(strings), Name = "BevestigWachtwoord")]
    private CultureInfo resourceCulture;
    [Compare("Password", ErrorMessage = ResourceManager.GetString("PassMismatch",resourceCulture))]
    public string ConfirmPassword { get; set; }

エラー(オブジェクト参照が必要です.........)はResourceManager.GetString( "PassMismatch"、resourceCulture))にあります] ErrorMessage =strings.PassMismatch(文字列は私のリソースです)を試してみると同じエラーが発生しますfile)文字列を入力するだけで、機能します。表示についても同じ問題がありましたが、

[Display(ResourceType = typeof(strings), Name = "Email")]

私がここで試すことができる同様の何かがありますか?

編集:私のエラー

エラー13非静的フィールド、メソッド、またはプロパティ'MvcApplication2.Models.RegisterModel.resourceCulture' C:\ Users \ stuart \ document \ visual studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ Models\AccountModelsにはオブジェクト参照が必要です。 cs 74 86 MvcApplication2エラー14非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です'System.Resources.ResourceManager.GetString(string、System.Globalization.CultureInfo)' C:\ Users \ steart \ document \ visual studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ Models \ AccountModels.cs 74 45 MvcApplication2エラー11「MvcApplication2.Models.RegisterModel.error」に割り当てられる式は定数である必要がありますC:\ Users \ steart \ document \ visual studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ Models\AccountModels。cs 67 30 MvcApplication2エラー12プロパティまたはインデクサー'MvcApplication2.strings.PassMismatch'は、getアクセサーC:\ Users \ stuart \ document \ visual studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ Models \がないため、このコンテキストでは使用できません。 AccountModels.cs 67 30 MvcApplication2

他のコメントについては、ErrorMessage = resourceCulture ResourceManager.GetString( "PassMismatch"、Thread.CurrentThread.CurrentUICulture))]のようなものを試しています。

しかし、何も機能していません

4

2 に答える 2

0

ResourceManagerの静的参照を渡して、CurrentCultureを取得しようとしても:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Resources;
using System.Globalization;

namespace QMVC.ViewModel.Home
{
  public class TResViewModel
  {
    private static ResourceManager r = QMVC.Properties.Resources.ResourceManager;

    [Required(ErrorMessage = r.GetString("Test", CultureInfo.CurrentUICulture))]
    public string Test { get; set; }
  }
}

コンパイル時にエラーが発生します: 「属性引数は、定数式、typeof式、または属性パラメーターtypeの配列作成式である必要があります」

言い換えると、属性パラメーターはコンパイル時に解決する必要があるため、属性の引数に動的に値を設定することはできません(これは理にかなっています)。

最良の(単純な)方法は、おそらく検証属性、ErrorMessageResourceTypeおよびErrorMessageResourceNameに他の引数を使用することです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Resources;
using System.Globalization;

namespace QMVC.ViewModel.Home
{
  public class TResViewModel
  {  
    [Required(ErrorMessageResourceType = typeof(QMVC.Properties.Resources), ErrorMessageResourceName = "Test")]
    public string Test2 { get; set; }

      }
    }

ErrorMessageは、検証プロセス中に、リソースのタイプ、指定されたキー、およびCurrentCultureを使用して作成されます。

よろしく。

于 2012-06-08T14:26:27.587 に答える
0

この行を置き換えます:

[Compare("Password", ErrorMessage = ResourceManager.GetString("PassMismatch",resourceCulture))]

この行で:

[Compare("Password", ErrorMessageResourceType = typeof(strings), ErrorMessageResourceName = "PassMismatch")]

stringsまた、リソースタイプにマップされているリソースファイルにPassMismatch文字列が追加されていることを確認してください。

于 2012-06-08T14:42:33.203 に答える