对于MVCSiteMapProvider资源文件(Resource file for MVCSite

2019-09-18 22:56发布

我使用MVCSiteMapProvider与本地化我的应用程序生成菜单。 我的程序只要在菜单中的资源文件的文件夹App_GlobalResources文件工作正常。 当我移动资源到另一个文件夹,它给出了一个错误提没能找到资源。 我使用$resources:Resource,menu_Home在MVC.sitemap文件访问的资源。 我想保持在自定义文件夹的资源文件,而无需将它们存储在App_GlobalResources文件夹中。 任何人都可以帮忙吗?

Answer 1:

它发生的,因为在MvcSiteMapNode.Title属性下面的代码:

var implicitResourceString = GetImplicitResourceString("title");
if (implicitResourceString != null && implicitResourceString == this["title"])
{
    return implicitResourceString;
}
implicitResourceString = GetExplicitResourceString("title", this["title"], true);
if (implicitResourceString != null && implicitResourceString == this["title"])
{
    return implicitResourceString;
}

在GetExplicitResourceString()方法最后一个参数是true,这意味着throwIfNotFound。 这就是为什么会抛出异常。 我固定它通过用下面的代码替换上面的代码:

if (!string.IsNullOrEmpty(title))
{
    if (Provider.EnableLocalization)
    {
        try
        {
            if (!string.IsNullOrEmpty(title) && title.Contains("."))
            {
                int idx = title.LastIndexOf(",");
                string res = title.Substring(0, idx);
                string assembly = title.Substring(idx + 1);

                idx = res.LastIndexOf(".");
                string type = res.Substring(0, idx);
                string key = res.Substring(idx + 1);
                var rm = new ResourceManager(type, Assembly.Load(assembly));
                return rm.GetString(key);
            }
        }
        catch
        {
        }
        return title;
    }
}

和.sitemap文件,而不是标题=里面的“$资源:资源,重点”语法使用标题=“Namespace.Class.Property,大会”语法使用时采用嵌入式资源具有很强的类型生成的类更适合。



文章来源: Resource file for MVCSiteMapProvider