1

メールを送信するためにレンダリングする必要があるリソース (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();
        }
    }

私のビューは、ユーザーのカルチャから取得したリソースに基づいています。ビューをレンダリングしてカルチャをサポートするにはどうすればよいですか?

4

2 に答える 2

1

基本的に、このようにするか、独自のヘルパー メソッドにカプセル化することができます。

    @Html.ViewContext.HttpContext.GetGlobalResourceObject("resource", key, new System.Globalization.CultureInfo("de-AT")
于 2012-05-14T08:30:10.367 に答える
1

必要なのは、現在のスレッドの 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(); 
    } 
} 

また、必要な言語で表示されます。

于 2012-05-15T10:52:58.707 に答える