对象引用是必需的+ resx文件?

时间:2012-06-08 13:12:15

标签: c# asp.net-mvc internationalization

我的代码国际化存在问题。它在我的网站上的任何地方都非常有用,除了这部分代码。

[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(其中字符串是我的资源文件),我得到相同的错误 当我只填写一个字符串时,它确实有效。 我有同样的问题显示,但我通过做

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

我可以在这里尝试类似的东西吗?

编辑:我的错误

错误13非静态字段,方法或属性'MvcApplication2.Models.RegisterModel.resourceCulture'需要对象引用C:\ Users \ stuart \ documents \ visual studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ Models \ AccountModels.cs 74 86 MvcApplication2 错误14非静态字段,方法或属性'System.Resources.ResourceManager.GetString(string,System.Globalization.CultureInfo)'C:\ Users \ stuart \ documents \ visual studio 2010 \ Projects需要对象引用\ MvcApplication2 \ MvcApplication2 \ Models \ AccountModels.cs 74 45 MvcApplication2 错误11分配给'MvcApplication2.Models.RegisterModel.error'的表达式必须是常量C:\ Users \ stuart \ documents \ visual studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ Models \ AccountModels.cs 67 30 MvcApplication2 错误12属性或索引器'MvcApplication2.strings.PassMismatch'不能在此上下文中使用,因为它缺少get访问器C:\ Users \ stuart \ documents \ visual studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ Models \ AccountModels.cs 67 30 MvcApplication2

对于其他评论,我正在尝试像     ErrorMessage = resourceCulture ResourceManager.GetString(“PassMismatch”,Thread.CurrentThread.CurrentUICulture))]

但是没有任何工作

2 个答案:

答案 0 :(得分: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表达式或数组创建表达式”

换句话说:您不能动态地为属性的参数设置值,因为必须在编译时解析属性参数(这是有意义的)。

最好的(简单)方法可能是使用其他参数来验证属性,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; }

      }
    }

在验证过程中,将使用您的资源类型,给定密钥和CurrentCulture创建ErrorMessage。

问候。

答案 1 :(得分:0)

替换此行:

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

这一行:

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

确保已将PassMismatch字符串添加到映射到strings资源类型的资源文件中。