2009-05-03 1 views
2

MVCプロジェクトを作成し、その "Scripts"フォルダにはMicrosoftAjax.js(リリースとデバッグのバージョン)が含まれます。ASP.NET MVCでのMicrosoftAjax.jsのスクリプトグローバリゼーションはどうですか?

少なくともVisual Web Developer 2008 Express Editionでは、Scriptsフォルダにはグローバリゼーションスクリプト、つまりそのための '__cultureInfo'を定義して設定する205個のファイル(例: "af-ZA.js")が含まれていません文化。

これらは、MVCプロジェクトテンプレートのZipファイルにもありません。

私はあなたが

MsAjaxの__cultureInfoは、ブラウザの優先言語に合わせた状態で、スクリプトのグローバル化を行うためのMVCの方法は何であるそれらを個別にダウンロードし、しかし...ことができますね?

答えて

5

OK ...よく...あなたは自分でそれを行う必要があります。

次のコードは、グローバリゼーションスクリプトを入手してインストールする方法を示しています。さらに、スクリプトのグローバリゼーションを有効または無効にして、ビューまたはマスターページにMS AJAXへの参照を挿入できる便利な拡張方法を提供します。

特徴: -

  • 随意スクリプトグローバル
  • を有効デバッグ
  • 最小限の労力でビュー上MS AJAXを注入またはアセンブリがデバッグでコンパイル あるか否かに応じてバージョン選択をリリースまたはモード
  • を放し
  • は、オプションでSys.Application.initialize()関数の呼び出しを挿入します。
  • インラインスクリプトグローバリゼーションを有効にするコード。 ScriptManagerと同じです(条件付きコンパイルシンボルが必要です)。デフォルトではの参照がグローバリゼーションスクリプトファイルに挿入されます。

お楽しみください!

// 
// Include Microsoft Ajax In Your ASP.NET MVC Projects, Optionally With Script Globalization Enabled 
// ------------------------------------------------------------------------------------------------- 
// 
// Written by Andrew Webb, 4th May 2009. 
// 
// Feel free to use in your ASP.NET MVC projects. 
// Written for ASP.NET MVC 1.0 and .NET Framework 3.5 SP1. 
// 
// With thanks to Bertrand LeRoy and Steven Sanderson. 
// http://weblogs.asp.net/bleroy/ 
// http://blog.codeville.net/ 
// 
// Example usage of 'IncludeMicrosoftAjax':- 
// <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" Culture="auto" UICulture="auto" %> 
// <%@ Import Namespace="AspNetMvcHelper" %> 
// <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
// <html xmlns="http://www.w3.org/1999/xhtml" > 
// <head runat="server"> 
//  <!-- Include Ms Ajax, with script globalization enabled --> 
//  <%= Html.IncludeMicrosoftAjax (true, false) %> 
//  <!-- other script references here, e.g. jQuery --> 
// </head> 
// etc. 
// 
// Note: for script globalization, the method in this file gets the current thread's current culture. 
// The Culture="auto" setting in the Page directive (above) causes this to be set to the browser's 
// preferred language. Alternatively you can set the current thread's current culture manually. 
// 
// NOTA BENE: for script globalization, the 205 globalization scripts from the MS AJAX Library must be 
// obtained from Microsoft and added to your ASP.NET MVC project, as follows: 
// 1) Download the Microsoft AJAX Library 3.5 from: 
// http://www.asp.net/ajax/downloads/ 
// 
// 2) Extract all files from the Zip, and locate the "Globalization" folder. It should have 205 script files 
// in it, from "af-ZA.js" to "zu-ZA.js". Copy this folder inside your website/project, under the "Scripts" 
// folder. Rename the folder to "MsAjaxGlobalization". The resulting structure should be: 
// <project>\ 
//  Scripts\ 
//  MsAjaxGlobalization\ 
//   <205 files> 
//  <jQuery, Ms Ajax and Ms Mvc Ajax files> 
// 
// Be sure to include the "MsAjaxGlobalization" folder in your web project. The easiest way is to click 
// "Show All Files" button in the Solution Explorer's toolbar so that all files are shown, then right-click 
// on "MsAjaxGlobalization" folder and select 'Include In Project' menu item. You can now unshow all files 
// again. 
// 

using System; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.UI; 
using System.Text; 
using System.IO; 
using System.Threading; 
using System.Globalization; 
using System.Diagnostics.CodeAnalysis; 

namespace AspNetMvcHelper 
{ 
    public static class ViewHelpers 
    { 
    /// <summary> 
    /// Includes Microsoft Ajax in a View, optionally with script globalization enabled. 
    /// </summary> 
    /// <param name="helper"> 
    /// Unused. Included because this method is an extension method of System.Web.Mvc.HtmlHelper. 
    /// </param> 
    /// <param name="enableScriptGlobalization"> 
    /// true to enable script globalization, else false. If true, be sure to include the 205 globalization 
    /// scripts in your project, in a subfolder called "MsAjaxGlobalization". This must be a direct sub- 
    /// folder of the "Scripts" folder, which in turn must live under the project root (which is the default 
    /// for MVC projects). 
    /// </param> 
    /// <param name="initializeSysApplication"> 
    /// true to insert a call to 'Sys.Application.initialize', else false. (Note sure if this should be 
    /// done or not for MVC, so it's an option.) 
    /// </param> 
    /// <returns> 
    /// Include-text that contains "script" tags that a) set up variable '_cultureInfo' (optional), b) 
    /// cause the browser to load the Microsoft Ajax library (debug or release), and c) call function 
    /// 'Sys.Application.initialize' (optional). 
    /// </returns> 
    [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId="helper")] 
    public static String IncludeMicrosoftAjax (this HtmlHelper helper, Boolean enableScriptGlobalization, 
               Boolean initializeSysApplication) 
    { 
     // Define INLINE_SETCULTUREINFO if you want to include the statement to set __cultureInfo in the HTML, 
     // like the ScriptManager does. Leave it undefined to have a script file reference instead (preferred). 

#if INLINE_SETCULTUREINFO 
     String setCultureInfoText = null; 
#endif 
     String globalizationScriptFileName = null; 

     // Text length without the inline statement to set __cultureInfo. 
     Int32 includeTextLength = 400; 


     // If script globalization is enabled, get the statement that sets __cultureInfo, and add the 
     // length of this statement to the overal length of the include-text. 
     if (enableScriptGlobalization) 
     { 
     // Get the current thread's current culture. Note: we could have a param that says whether to 
     // use this or the UICulture. 
     CultureInfo culture = Thread.CurrentThread.CurrentCulture; 

     // Form the name of the globalization script file, "en-US.js". 
     globalizationScriptFileName = culture.Name + ".js"; 

#if INLINE_SETCULTUREINFO 
     // Read in the contents of this file. Note that if this fails, the browser will be left with 
     // __cultureInfo set to "en-US" (see file "MicrosoftAjax.debug.js", lines 6432 and 6433). 
     try 
     { 
      setCultureInfoText = String.Empty; 
      String path = HttpContext.Current.Server.MapPath ("~/Scripts/MsAjaxGlobalization/" + 
                  globalizationScriptFileName); 
      setCultureInfoText = File.ReadAllText (path); 

      includeTextLength += setCultureInfoText.Length; 
     } 
     catch (System.ArgumentNullException) 
     { 
     } 
     catch (System.ArgumentException) 
     { 
     } 
     catch (System.IO.PathTooLongException) 
     { 
     } 
     catch (System.IO.DirectoryNotFoundException) 
     { 
     } 
     catch (System.IO.FileNotFoundException) 
     { 
     } 
     catch (System.IO.IOException) 
     { 
     } 
     catch (System.UnauthorizedAccessException) 
     { 
     } 
     catch (System.NotSupportedException) 
     { 
     } 
     catch (System.Security.SecurityException) 
     { 
     } 
     catch (System.Web.HttpException) 
     { 
     } 
#endif 
     } 


     // Create and initialize the StringBuilder in which we'll build up the include-text. 
     StringBuilder sb = new StringBuilder (includeTextLength); 
     sb.AppendLine(); 


     // Get the application absolute path of the MS AJAX file (release or debug). As you can see, 
     // the folder and file names and locations are hardcoded. Convention... but er, no configuration! 
#if DEBUG 
     String msAjaxScriptPath = VirtualPathUtility.ToAbsolute ("~/Scripts/MicrosoftAjax.debug.js"); 
#else 
     String msAjaxScriptPath = VirtualPathUtility.ToAbsolute ("~/Scripts/MicrosoftAjax.js"); 
#endif 

     // Add the globalization statement. 
     if (enableScriptGlobalization) 
     { 
#if INLINE_SETCULTUREINFO 
     sb.AppendLine ("<script type=\"text/javascript\">"); 
     sb.AppendLine ("//<![CDATA["); 
     sb.AppendLine (setCultureInfoText); 
     sb.AppendLine ("//]]>"); 
     sb.AppendLine ("</script>"); 
#else 
     String path = VirtualPathUtility.ToAbsolute ("~/Scripts/MsAjaxGlobalization/" + globalizationScriptFileName); 
     sb.AppendLine ("<script src=\"" + path + "\" type=\"text/javascript\"></script>"); 
#endif 
     } 

     // Add the MS AJAX library reference.  
     sb.AppendLine ("<script src=\"" + msAjaxScriptPath + "\" type=\"text/javascript\"></script>"); 

     // Add the call to initialize Sys.Application. 
     if (initializeSysApplication) 
     { 
     sb.AppendLine ("<script type=\"text/javascript\">"); 
     sb.AppendLine ("//<![CDATA["); 
     sb.AppendLine ("if (typeof (Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');"); 
     sb.AppendLine ("Sys.Application.initialize();"); 
     sb.AppendLine ("//]]>"); 
     sb.AppendLine ("</script>"); 
     } 

     // Return the resulting include-text.  
     return (sb.ToString()); 
    } 
    } 
} 
関連する問題