Session or Cookies in login page = master page = child page

I' creating a multilanguage website and I have some files :

  1. login page.
  2. master page.
  3. child page using master page.

In login page, I used link control for choose language by user :

<table class="borderlang" style="position: absolute; top: 5px; left: 5px; width: auto; height: auto;">
        <tr>
            <td style="vertical-align: middle;">
                <asp:Label ID="Label1" runat="server" Text="Language :" meta:resourcekey="Label1Resource1"></asp:Label>
            </td>
            <td>
                <a href="?lang=vi" runat="server" id="linkVietnameseLang">
                    <img src="Content/Images/VNlogo.jpg" style="height: 20px; width: auto; padding-left: 10px;" /></a>
            </td>
            <td>
                <a href="?lang=en" runat="server" id="linkEnglishLang">
                    <img src="Content/Images/USALogo.png" style="height: 20px; width: auto; padding-left: 10px;" /></a>
            </td>
        </tr>
    </table>

I use BasePage.cs with code :

public class BasePage : System.Web.UI.Page
{
    protected override void InitializeCulture()
    {
        if (!string.IsNullOrEmpty(Request["lang"]))
        {
            Session["lang"] = Request["lang"];
        }
        string lang = Convert.ToString(Session["lang"]);
        string culture = string.Empty;
        if (lang.ToLower().CompareTo("en") == 0)
        {
            culture = "en-US";
        }
        if (lang.ToLower().CompareTo("vi") == 0 || string.IsNullOrEmpty(culture))
        {
            culture = "vi-VN";
        }
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

        base.InitializeCulture();
    }
}

So in login page I use :

public partial class Login : BasePage

To use BasePage.

In this form have some items that I can't use local resource, so I used 2 resources : global resource and local resource. But I don't care because when I choose language in link -> language change and global and local resource are changed, too.

Now, when I login, website will redirect to a page using master page. In master page I put a dropdown for user in case they wanna change language again :

<asp:DropDownList ID="ddlLanguage" runat="server"
                OnSelectedIndexChanged="ddlLanguage_SelectedIndexChanged"
                AutoPostBack="True" meta:resourcekey="ddlLanguageResource1">
                <asp:ListItem Text="Tiếng ViệT" Value="vi-VN" meta:resourcekey="ListItemResource1" />
                <asp:ListItem Text="EnglisH" Value="en-US" meta:resourcekey="ListItemResource2" />
            </asp:DropDownList>

And in master page I add :

if (!Page.IsPostBack)
        {
            ddlLanguage.SelectedValue = Thread.CurrentThread.CurrentCulture.Name;
        }

and :

protected void ddlLanguage_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Sets the cookie that is to be used by Global.asax
        HttpCookie cookie = new HttpCookie("CultureInfo");
        cookie.Value = ddlLanguage.SelectedValue;
        Response.Cookies.Add(cookie);
        //Set the culture and reload the page for immediate effect. 
        //Future effects are handled by Global.asax
        Thread.CurrentThread.CurrentCulture =
                      new CultureInfo(ddlLanguage.SelectedValue);
        Thread.CurrentThread.CurrentUICulture =
                      new CultureInfo(ddlLanguage.SelectedValue);
        Server.Transfer(Request.Path);
    }

In global.asax is :

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpCookie cookie = Request.Cookies["CultureInfo"];
        if (cookie != null && cookie.Value != null)
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookie.Value);
            Thread.CurrentThread.CurrentCulture = new CultureInfo(cookie.Value);
        }
        else
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("vi-VN");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("vi-VN");
        }
    }

Question 1 : How can I use session or cookies of link value (in login page) to master page : ddlanguage value = session or cookies of lang ??

Now, in child page using master page. I must use local resource because if use global resource I must use <%$ Resources:nameresource, keysource%> -> too slow. And I have a problem : in child page with local resoure, culture and uiculture value is not depending on ddlanguage value in master page.

Question 2 : How can I set culture and uiculture value in child page = ddlanguage value in master page.

And result is : lang value in login page = ddlanguage dropdown value in master page = culture and uiculture in child page using that masterpage. But can change ddlanguage value in masterpage and cultureanduiculture in child page will change, too.

.

I'm an amateur in coding, so I hope have solution in my case. Thank very very much (and sorry for my English).

Upvotes: 0

Views: 334

Answers (1)

Raj
Raj

Reputation: 143

In program.cs
user name can set Globals variable
namespace GlobalVariables
{
    public static class Globals
    {
       static Globals() 
       {
         userName="";
       }
       public static void setusername(int[] newInt)
       {
         setusername = newInt;
    }
    public static string userName { get; private set; }
}

you can set or get every child or parent form
inherit namespace like in another child or parent form
using GlobalVariables;

to set Globals session or cookiee
Globals.setusername(userName.ToString()));

you can check and restrict page
username=Globals.userName;

 Response.Cookies("userInfo")("userName") = "rangarajakrishnan"
    Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString
    Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)

    Dim aCookie As New HttpCookie("userInfo")
    aCookie.Values("userName") = "mike"
    aCookie.Values("lastVisit") = DateTime.Now.ToString
    aCookie.Expires = DateTime.Now.AddDays(1)
    Response.Cookies.Add(aCookie)

Upvotes: 0

Related Questions