2

嗨,我一直在寻找一些解决方案,但我什么也没找到......

有没有办法通过 ActionNameAttribute 使用资源?

例如,在属性中使用 DisplayNameAttribute,我们可以求助于:

    [Display(Name = "labelForName", ResourceType = typeof(Resources.Resources))] 
    public string name{ get; set; }  

但我不知道如何将资源用于我的操作方法......

谢谢

4

1 回答 1

3

您可以编写自定义属性来完成此任务:

[AttributeUsage(AttributeTargets.Method, AllowMultiple=false, Inherited=true)]
public sealed class LocalizedActionNameAttribute : ActionNameSelectorAttribute
{
    public LocalizedActionNameAttribute(string name, Type resourceType)
    {
        Name = name;
        ResourceType = resourceType;
    }

    public Type ResourceType { get; private set; }
    public string Name { get; private set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo)
    {
        var rm = new ResourceManager(ResourceType);
        var name = rm.GetString(Name);
        return string.Equals(actionName, name, StringComparison.OrdinalIgnoreCase);
    }
}

接着:

[LocalizedActionName("Index", typeof(Resources.Resources))]
public ActionResult Index()
{
    return View();
}
于 2012-06-14T17:42:17.587 回答