masterpage initializeculture pas de méthode appropriée trouvé pour remplacer erreur?
Je suis en train de développer un site web Multilingue à l'aide de ASP.NET avec C#
Mon problème est: je veux faire de ma MasterPage en charge de commutation entre les langues, mais quand j'ai mis le "InitializeCulture()" à l'intérieur de la masterpage.cs, j'ai eu cette erreur.
c'est mon code:
public partial class BasicMasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
if (e.Day.IsToday)
{
e.Cell.Style.Add("background-color", "#3556bf");
e.Cell.Style.Add("font-weight", "bold");
}
}
Dictionary<string, System.Globalization.Calendar> Calendars =
new Dictionary<string, System.Globalization.Calendar>()
{
{"GregorianCalendar", new GregorianCalendar()},
{"HebrewCalendar", new HebrewCalendar()},
{"HijriCalendar", new HijriCalendar()},
{"JapaneseCalendar", new JapaneseCalendar()},
{"JulianCalendar", new JulianCalendar()},
{"KoreanCalendar", new KoreanCalendar()},
{"TaiwanCalendar", new TaiwanCalendar()},
{"ThaiBuddhistCalendar", new ThaiBuddhistCalendar ()}
};
protected override void InitializeCulture()
{
if (Request.Form["LocaleChoice"] != null)
{
string selected = Request.Form["LocaleChoice"];
string[] calendarSetting = selected.Split('|');
string selectedLanguage = calendarSetting[0];
CultureInfo culture = CultureInfo.CreateSpecificCulture(selectedLanguage);
if (calendarSetting.Length > 1)
{
string selectedCalendar = calendarSetting[1];
var cal = culture.Calendar;
if (Calendars.TryGetValue(selectedCalendar, out cal))
culture.DateTimeFormat.Calendar = cal;
}
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
base.InitializeCulture();
}
}
Comment puis-je créer une classe de Base?
Je suis aussi à la recherche d'un moyen de le faire, donc je ne peux pas vous donner une solution, mais je peux vous dire que la méthode
InitializeCulture()
existe seulement sur la Page de la classe, pas la MasterPage de la classe, et c'est pourquoi vous obtenez ce message d'erreur.OriginalL'auteur Nuha_IT | 2012-08-04
Vous devez vous connecter pour publier un commentaire.
La méthode
InitializeCulture()
n'existe que sur le Page de la classe, pas le MasterPage classe, et c'est pourquoi vous obtenez cette erreur.Pour résoudre ce problème, vous pouvez créer un
BasePage
que toutes vos pages héritent:BasePage
, ou ce que vous voulez.BasePage
.Voici un exemple:
Et les pages spécifiques devrait ressembler à quelque chose comme ceci:
Je suggère de poser une nouvelle question avec le nouveau problème spécifique
vous dites faire de la page maître hériter de la
BasePage
trop? Parce qu'il hérite deSystem.Web.UI.MasterPage
par défaut? Toutes les autres page n'localiser parfaitement son seulMasterPage
c'était le problème de laOP
en premier lieuNon, la page principale ne devrait pas hériter de la
BasePage
, depuis leBasePage
est unSystem.Web.UI.Page
et pas unSystem.Web.UI.MasterPage
. Cette solution est un moyen de créer une fonctionnalité pour plusieursPage
s. Ce que l'OP voulait soutenir le changement de langues et sur tous les sites en appelantinitializeCulture()
. Depuis que la méthode est définie sur laPage
classe (leMasterPage
a pas d'équivalent à ma connaissance), j'ai défini unePage
-classe wrapper qui permet de faire la même fonction de plusieurs pages. De base des CRUES.Pour la page maître localiztion deuxième réponse sur stackoverflow.com/questions/1147367/... fonctionne parfaitement
OriginalL'auteur Aske B.
Il y a une autre solution qui NE vous oblige PAS à créer un BasePage.
Le problème avec la "Culture", c'est qu'il est très très tôt sur la page du cycle de vie, de sorte que le
Page.InitializeCulture
événement est l'un des premiers événements sur la page (si ce n'est le seul) où l'on peut raccorder jusqu'à modifier leThread.CurrentThread.CurrentUICulture
. Mais que faire si nous le faisons encore plus tôt, dès que la Demande commence sur le serveur.- Je le faire sur le
Application_BeginRequest
de l'événement sur laGlobal.asax
fichier qui est appelé à chaque demande.Là, j'ai vérifier l'existence d'un cookie qui détient la culture que je veux utiliser. Si il n'y a pas de cookie, puis la culture par défaut sera utilisé.
Changer la langue de mon application, j'ai juste besoin d'un contrôle que les changements de la valeur du cookie côté client et ensuite de faire une simple publication sur le serveur. Il n'a pas d'importance si un tel contrôle sur le Contenu de la Page ou dans la Page principale, il n'a même pas besoin de n'importe quel code sur le serveur-côté, parce que tout le traitement est fait sur la méthode ci-dessus, et le cookie est défini sur le côté client avant même que la page est affichée.
J'ai utilisé un simple LinkButton (qui est considéré comme un Drapeau Mexicain), mais vous pouvez utiliser n'importe quel autre contrôle que faire une publication lors d'un clic/changé.
Juste avant ce bouton publie sur le serveur, il s'exécute côté client, cliquez sur l'événement qui met à jour la valeur du cookie, je veux, et le tour est joué!
J'ai le code javascript qui définit le cookie à la Page principale, section de la tête:
Que c'est!! Le
Thread.CurrentThread.CurrentUICulture
est changé et pasBasePage
classe est nécessaire, ni substitution de laPage.InitializeCulture
méthode. Il y a même du côté de l'effet que la langue sélectionnée est mémorisée sur la suite des visites, car il est stocké sur un cookie.Si vous souhaitez utiliser un
DropDownList
au lieu d'unLinkButton
, assurez-vous de définir leAutoPostBack="true"
et, puisqu'il n'est pasOnClientChanged
propriété pour laDropDownList
, vous devez coder en dur leonchange
attribut sur laDropDownList
et passer à la valeur sélectionnée de la même fonction javascript.La
onchange
attribut n'est pas une partie de laDropDownList
propriétés, cependant, depuis laDropDownList
est un analogue de contrôle de la<select>
de contrôle, l'attribut est mis " en " quand le rendu qui se passe, et elle est rendue avant la publication mécanisme de code. Voici le code HTML rendus par leDropDownList
ci-dessus:Espère que quelqu'un trouve que cette approche est utile que je le fais. 🙂
Response.Cookies["language"].Value =
, et le global.asax fichier se chargera de récupérer le cookie tout de suiteOriginalL'auteur alonso.torres