【问题标题】:Render View to string using resources使用资源将视图渲染为字符串
【发布时间】:2012-05-14 08:15:38
【问题描述】:

我有发送邮件需要渲染的资源 (resx) 文件和视图。我使用这个解决方案:

 protected string RenderPartialViewToString(string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.RouteData.GetRequiredString("action");

        ViewData.Model = model;

        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);

            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }

我的视图基于从用户文化中获取的资源,如何渲染视图以支持文化?

【问题讨论】:

    标签: asp.net-mvc-3 model-view-controller render culture


    【解决方案1】:

    基本上你可以这样做或将其封装在你自己的辅助方法中。

        @Html.ViewContext.HttpContext.GetGlobalResourceObject("resource", key, new System.Globalization.CultureInfo("de-AT")
    

    【讨论】:

    • 顺便说一句:您还可以在项目中使用标准 MVC 对流创建文件夹结构:资源/视图。您可以在其中创建一个名为 Shared 的文件夹。如果你在那里添加一个 Global.resx 文件,可以说你的一般本地化字符串。然后你可以像这样访问它们:@Resources.Global.NameOfResourceKey
    【解决方案2】:

    我认为您需要将当前线程的 CurrentUICulture 设置为您要使用的文化。 为此,您需要以下代码: Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");//语言名大概会是个参数 Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

    所以你的代码应该是这样的:

    protected string RenderPartialViewToString(string viewName, object model, string languageName) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredString("action");

        ViewData.Model = model; 
    
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(languageName);//The language name will probably be a parameter
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
    
        using (StringWriter sw = new StringWriter()) 
        { 
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
    
            viewResult.View.Render(viewContext, sw); 
    
            return sw.GetStringBuilder().ToString(); 
        } 
    } 
    

    您的视图将以您需要的语言呈现。

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2015-11-01
      • 1970-01-01
      相关资源
      最近更新 更多