我无法从用户控制器获取值

时间:2013-11-25 12:25:00

标签: c# asp.net asp.net-mvc master-pages multilingual

这是我的问题。我有一个母版页,其中包含一些用于设置网页语言的标记。

在母版页内我有一个包含菜单项的用户控制器。这些菜单项取决于选择的标志,它会改变。

当我查看Web应用程序的生命周期时,首先运行mainpage_loader,然后运行用户控件加载器,最后, 运行主页面内定义的功能(标志按钮功能)。

但我需要的是在用户控件内获取会话值。取决于此会话值,加载菜单取决于所选语言。 但在这种情况下,我从未捕获会话值,在用户控件内部,因为在通过步骤母版页功能之后。 我怎么解决这个问题。感谢。

我的主页

     protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["lang"]==null)
                {
                    Session["lang"] = "m_en";

                }
                else
                {

                }

            }


         [DirectMethod(IDMode = DirectMethodProxyIDMode.None)]
            public void Change_Lang_Event(string lang)
            {    
                CultureInfo ci;

                switch (lang)
                {
                    case "m_tr":
                        ci = new CultureInfo("tr-TR");
                        Session["lang"] = "m_tr";
//problem is here I coulnt reach Language properti
       ((UserControl)Page.Master.FindControl("MyMenu1")).Language = Session["lang"].ToString();


                        break;
                    case "m_en":
                        ci = new CultureInfo("en-US");
                        Session["lang"] = "m_en";



                        break;
                    case "m_ru":
                        ci = new CultureInfo("ru-RU");
                        Session["lang"] = "m_ru";




                    default:
                       ci = new CultureInfo("tr-TR");
                        Session["lang"] = "m_tr";


                        break;
                }

我的USERCONTROL:

 public partial class MyMenu : System.Web.UI.UserControl

{
    static List<Ofis> lst;
    static CultureInfo cim;
    string dilSesion = "";
    private string _languages;

    public string Languages
    {
        get { return _languages; }
        set { _languages = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

       dilSesion =   Session["lang"].ToString();
      X.Msg.Alert("Uyarı", dilSesion).Show();


    }



}

主要aspx;

 <asp:Contentplaceholder id="Contentplaceholder1" runat="server">
            <uc1:MyMenu ID="MyMenu1" runat="server" />
        </asp:Contentplaceholder>

1 个答案:

答案 0 :(得分:1)

如果在UserControl中定义属性,即

private string _language;

public string Language
{
    get
    {
        return _language;
    }

    get
    {
        return _language;
    }

}

然后你可以在MasterPage代码中设置它:

((UserControl)Page.Master.FindControl('controlID')).Language = Session["lang"].ToString()

请注意,必须将用户控件强制转换为UserControl类。