2012-06-08 34 views
0

我有一個國際化我的代碼的問題。除了這部分代碼之外,它在我的網站上的任何地方都非常棒。需要對象引用+ resx-file?

[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 =串.PassMismatch(其中字符串是我的資源文件) 當我只是填寫一個字符串,它確實有效。 我爲顯示了同樣的問題,但我固定的做

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

是否有類似的東西我可以試試嗎?

編輯:我的錯誤

錯誤13的對象引用是所必需的非靜態字段,方法或屬性「MvcApplication2.Models.RegisterModel.resourceCulture」 C:\用戶\司徒\文件\視覺工作室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:\用戶\斯圖爾特\文檔\ Visual Studio 2010的\項目\ MvcApplication2 \ MvcApplication2 \型號\ AccountModels.cs 67 30 MvcApplication2

爲其他評論,我試圖像 東西的ErrorMessage = resourceCulture ResourceManager.GetString( 「PassMismatch」,Thread.CurrentThread.CurrentUICulture))]

只是沒有什麼工作

+0

在將它傳遞給ResourceManager.GetString()之前,你(如果是這樣,如何)分配resourceCulture ...?否則,你會通過null! – Jocke

+0

你可以發佈你有異常的堆棧跟蹤嗎? –

+0

resourceCulture = null – Reniuz

回答

0

替換此行:

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

這一行:

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

並確保已將您PassMismatch字符串映射到您的strings資源類型的資源文件。

+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; } 

     } 
    } 

的的ErrorMessage將與您的資源,給定的密鑰和類型,來創建CurrentCulture,在驗證過程中。

問候。

+0

感謝您的回覆,我不知道如何在我的代碼中實現這一點。我已經嘗試了比較行 [必需(ErrorMessageResourceType = typeof(字符串),ErrorMessageResourceName =「PassMisMatch」)] 我現在似乎沒有得到一個錯誤,即使密碼不匹配,我現在可以註冊,所以它不再比較。 –

+0

仍然使用比較ConfirmPassword。僅在密碼中使用必需。 –

相關問題