我的代码国际化存在问题。它在我的网站上的任何地方都非常有用,除了这部分代码。
[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))]
但是没有任何工作
答案 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
资源类型的资源文件中。