C# 如何使用resx文件管理门户内容

C# 如何使用resx文件管理门户内容,c#,asp.net,asp.net-mvc,asp.net-mvc-4,resources,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Resources,我们正在开发一个电子商务系统,多个附属合作伙伴将使用该系统。我们希望为每个合作伙伴定制门户,并能够适应页面之间内容的细微变化。我们目前的技术是为每个合作伙伴创建一个.cshtml视图的副本,并对每个视图进行定制。我们的设计师正在呻吟,因为可能这些观点在措辞上只有细微的变化。我们只计划有10个左右的合作伙伴,因为我们的行业规模太大,所以一个成熟的CMS系统是多余的 我希望使用resx文件管理每个合作伙伴的内容字符串,就像使用它们管理不同语言的内容字符串一样。最终的结果是能够在视图中执行类似的操作

我们正在开发一个电子商务系统,多个附属合作伙伴将使用该系统。我们希望为每个合作伙伴定制门户,并能够适应页面之间内容的细微变化。我们目前的技术是为每个合作伙伴创建一个.cshtml视图的副本,并对每个视图进行定制。我们的设计师正在呻吟,因为可能这些观点在措辞上只有细微的变化。我们只计划有10个左右的合作伙伴,因为我们的行业规模太大,所以一个成熟的CMS系统是多余的

我希望使用resx文件管理每个合作伙伴的内容字符串,就像使用它们管理不同语言的内容字符串一样。最终的结果是能够在视图中执行类似的操作

请通过@Properties.Resources.partnerCustomerService电子邮件与客户服务部门联系

至少,您不必担心使用哪个资源文件来解析字符串PartnerCustomerServiceEmail


提前感谢您的帮助

我想到的第一个想法是将相关资源文件的名称保存到viewdata或Session中,并使用帮助程序获取值

假设您有两个合作伙伴:Foo物流和酒吧解决方案。为它们中的每一个创建一个资源文件:PartnerFoo.resx和PartnerBar.resx

在控制器中,将要使用的资源文件存储到ViewData中,如下所示:

public ActionResult About()
{
     ...
     ViewData["Resource"] = "MyMVCAppNamespace.Resources.PartnerFoo";
     return View();
}
也将名称空间包含到字符串中

然后在帮助器中编写代码,用viewdata检索资源

Helpers/Helper.cs:

namespace MyMVCAppNamespace.MvcHtmlHelpers
{
    public static class HtmlHelpersExtensions
    {
        public static ResourceManager PartnerResource(this HtmlHelper helper)
        {
            // Get resource filename from viewdata
            string res = helper.ViewContext.ViewData["Resource"].ToString();
            // Load the resource from assembly
            ResourceManager resourceManager = new ResourceManager(res, Assembly.GetExecutingAssembly());

            return resourceManager;
        }
    }
}   
现在在视图中,我们将使用此帮助器检索要写入的字符串:

关于.cshtml:

    @Html.PartnerResource().GetString("PartnerName")
    @Html.PartnerResource().GetString("PartnerCustomerServiceEmail")
其渲染为:

Foo Logistics service@foologistics.com
或者与PartnerBar合作

Bar Solutions service@barsolutions.com
我们在加载视图之前确定要使用的资源文件。然后在视图中,它根据存储在viewdata中的资源进行动态渲染。如果需要,您甚至可以将资源文件名存储到web.config中,并从那里将字符串加载到helper中

更酷的是,如果您有本地化的resx文件,比如PartnerFoo.fi.resx,然后在本例中使用不同的区域性fi,resourcemanager会自动查找本地化版本

您甚至可以通过在资源文件中存储图像URL等来进行简单的品牌创建

这真的很简单,但我希望它能让你开始