多种语言的错误消息

时间:2013-10-01 14:00:31

标签: asp.net-mvc-4

大家好日子,

我对我目前的开发有疑问,问题是我为我的数据访问层创建了一个使用ntier和数据应用程序块的项目,所以,我有一个名为Entities的包,我创建了所有类,我正在尝试使用映射到资源文件的错误消息问题是当我编写以下代码时,它标记错误:

(实体-BASE-客户机)

public partial class Clients {

public Int32 Id {get;set;}
[Display(Name="Name", 
ResourceType=typeof(Resources.Language))] 
[Required(AllowEmptyStrings=false, 
ErrorMessageResourceName="Id", 
ErrorMessageResourceType=typeof(Resources.Language))] 
public string Name {get;set;}
}

在下面的代码中,它标记了“Resources”(我放置资源文件的文件夹)中的错误,“Language”是资源文件。

但是,当我在“模型”文件夹上执行完全相同的操作时,没有标记任何错误

(型号客户机)

public Int32 Id {get;set;}
[Display(Name="Name", 
ResourceType=typeof(Resources.Language))] 
[Required(AllowEmptyStrings=false, 
ErrorMessageResourceName="Id", 
ErrorMessageResourceType=typeof(Resources.Language))] 
public string Name {get;set;}
}

我做错了吗?我错过了RF的参考或配置吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

这是一个老问题。为了解决这个问题,我停用了EDMX Code代,我创建了外部TT文件来生成: DomainLayer:包含EF EDMX类(带导航)

DataLayer:包含查询数据的内容

[Serializable]
public partial class Contact : _DomainLayer_Base  
{
    #region Primitive Properties

    /// <summary>
    /// Gets or sets Id.
    /// </summary>
    /// <value>The Id.</value>
    public virtual int Id
    {
        get;
        set;
    }

    /// <summary>
    /// Gets or sets FK_Language.
    /// </summary>
    /// <value>The FK_Language.</value>
    /// <remarks>
    /// Foregn key of Contact
    /// 
    /// </remarks>
    public virtual int FK_Language
    {
        get { return _fK_Language; }
        set
        {
            try
            {
                _settingFK = true;
                if (_fK_Language != value)
                {
                    if (Language != null && Language.Id != value)
                    {
                        Language = null;
                    }
                    _fK_Language = value;
                }
            }
            finally
            {
                _settingFK = false;
            }
        }
    }
}

MetaDataLayer :包含EF独立类,其数据注释链接到资源(无导航)

    [Serializable]
    public partial class Contact_MetaData : _MetaDataLayer_Base
    {
        [Display(Name = "Ety_Contact_Id" , ResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.MetaDataResources))]
        [Required(ErrorMessageResourceName = "ErrMsgRequired",ErrorMessageResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.Resources))]    
    public virtual int Id
    {
        get;
        set;
    }
    [Display(Name = "Ety_Contact_FK_Language" , ResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.MetaDataResources))]
    [Required(ErrorMessageResourceName = "ErrMsgRequired",ErrorMessageResourceType = typeof(InnovaApp.Layers.ResourcesLayer.Properties.Resources))]    
    public virtual int FK_Language
    {
        get;
        set;

    }

MetaModels:在门户网站内,MetaModels是MetaData成员容器。它们包含门户网站所需的数据。示例:如果您有外键,则ForeignKey值将在MetaData中,但用于填充查找的ListItem将在MetaModel中。 EntityLayer:包含EF EDMX

当我使用db:

创建EF Query I前缀结果时

当我在视图中使用数据时,我使用的是MetaDataLayer:

public class ContactViewer_MetaModel : Contact_MetaData

将数据从DomainLayer转移到MetaDataLayer我使用Emit Mapper,因为我的TT文件保证了Domain和MetaData之间的相同签名。

toReturn = ObjectMapperManager.DefaultInstance.GetMapper<Contact, ContactViewer_MetaModel>().Map(dbContact);

并在视图中:

@model InnovaApp.Layers.SecurityLayer.Models.MetaModels.Contact_MetaModel
@Html.HiddenFor(m => m.Id)
<ol class="olMainForm">
    <li>
        @Html.LabelFor(m => m.FK_Genre)
        @Html.DropDownListFor(m => m.FK_Genre, Model.Genres)
        @Html.ValidationMessageFor(m => m.FK_Genre)
    </li>
</ol>

您可以在此处找到完整的来源:

https://myprettycms.codeplex.com

答案 1 :(得分:0)

[Display(Name = "Name"), Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName ="nameHasToBeGiven")]
        public string name { get; set; }

这个更容易