2013-12-12 72 views
1

我们正在开发多个会员合作伙伴将使用的电子商务系统。我们希望为每个合作伙伴量身定制门户网站,并且能够适应页面之间内容的轻微变化。我们目前的技术是为每个合作伙伴创建一个.cshtml视图的副本,并对每个视图进行自定义。我们的设计师正在呻吟,因为这些意见可能仅在措辞上略有差异。我们只打算拥有10个左右的合作伙伴(由于我们行业的规模,它无法扩展),所以一个完整的CMS系统是过度的。如何使用resx文件来管理门户网站内容

我想使用resx文件管理每个合作伙伴的内容字符串,以便用他们来管理不同语言的内容字符串。最终的结果将是在视图中做这样的事情的能力。

请@ Properties.Resources.PartnerCustomerServiceEmail

客户服务中心联系不担心其资源文件是用来解决字符串PartnerCustomerServiceEmail。

预先感谢您的帮助

是在我脑海中是有问题成可视数据(或会话)保存资源文件的名称和使用一个辅助来获取值

回答

0

的第一个想法。

假设您有两个合作伙伴:Foo Logistics和Bar Solutions。为每个人分配一个资源文件:PartnerFoo.resx和PartnerBar.resx。

在你的控制器,存储您要使用到的ViewData作为资源文件:

public ActionResult About() 
{ 
    ... 
    ViewData["Resource"] = "MyMVCAppNamespace.Resources.PartnerFoo"; 
    return View(); 
} 

包括命名空间为字符串了。

然后代码在助手中检索与viewdata资源。

助手/ 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; 
     } 
    } 
} 

现在看来,我们要利用这个帮手来获取我们想要写入字符串:

About.cshtml:

@Html.PartnerResource().GetString("PartnerName") 
    @Html.PartnerResource().GetString("PartnerCustomerServiceEmail") 

它被渲染为:

Foo Logistics [email protected] 

或PartnerBar

Bar Solutions [email protected] 

我们确定在视图加载之前要使用的资源文件。然后在视图中根据存储在viewdata中的资源动态呈现它。您甚至可以将资源文件名存储到web.config中,如果需要,可以从该处加载字符串。

更酷的是,如果你有本地化的resx文件,说PartnerFoo.fi.resx,然后使用不同的文化(在这种情况下fi-FI),resourcemanager自动查找本地化的版本。

您甚至可以通过存储图像URL和资源文件中的内容来做简单的品牌推广。

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

相关问题