在page_load上的内容页面上传递母版页控制值

时间:2013-07-22 08:41:45

标签: c# asp.net master-pages

我在母版页上有一个下拉列表,我希望在内容页面加载时在内容页面上传递所选值。我的问题是,只有当我更改下拉列表中的值时,值才会通过。因此,当页面加载时我必须从下拉列表中重新选择以捕获下拉列表的值。如果我正在浏览内容页面,则所选值不会在页面加载时传递。 我的主页代码.net:

<asp:DropDownList ID="ddlcategories" 
        runat="server" DataSourceID="SqlDataSourcecategories" DataTextField="CategoryName" 
        DataValueField="CategoryID" AutoPostBack="True" 
        onselectedindexchanged="ddlcategories_SelectedIndexChanged"></asp:DropDownList>

母版页cs:

protected void Page_Load(object sender, EventArgs e)
{
 if (!IsPostBack)
 {    
      ddlcategories.DataBind();
      ddlcategories.Items.Insert(0, "Uncategorized");
      ddlcategories.Items[0].Value = "0";
      ddlcategories.SelectedValue = Convert.ToString(Session["lblCategoryID"]);
  }
}
protected void ddlcategories_SelectedIndexChanged(object sender, EventArgs e)
{
    Session["lblCategoryID"] = Convert.ToInt32(ddlcategories.SelectedValue);
}

内容页面cs:

protected void Page_Load(object sender, EventArgs e)
{                
    Label10.Text = Convert.ToString(((DropDownList)Master.FindControl("ddlcategories")).SelectedValue);                 
}

2 个答案:

答案 0 :(得分:3)

试试这个解决方案:

母版页:

<asp:DropDownList ID="ddlcategories" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlcategories_SelectedIndexChanged">
    <asp:ListItem>One</asp:ListItem>
    <asp:ListItem>Two</asp:ListItem>
</asp:DropDownList>

主页CS:

public string SelectedValue
{
    get
    {
        return ddlcategories.SelectedValue;
    }
    set
    {
        ddlcategories.SelectedValue= value;
    }
}

protected void ddlcategories_SelectedIndexChanged(object sender, EventArgs e)
{
    SelectedValue = ddlcategories.SelectedValue;
}

内容页面标记:

<%@ MasterType VirtualPath="~/Site1.Master" %>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

内容页面CS。

protected void Page_PreRender(object sender, EventArgs e)
{
    Label1.Text = Master.SelectedValue;
}

注意:值只是为了演示,您可以在下拉列表中使用实际的数据源值。

答案 1 :(得分:1)

您的问题是,“ ContentPage加载”发生在您无权访问下拉列表项的“ MasterPage加载”之前。

要解决此问题,您可以首先在母版页中绑定drobdownlist,但不能在“ MasterPage load”中绑定,可以在“ ContentPage Init”和“ MasterPage Load”之前发生的“ MasterPage Init”事件中进行绑定事件。

    protected void Page_Init(object sender, EventArgs e)
{  
      ddlcategories.DataBind();
      ddlcategories.Items.Insert(0, "Uncategorized");
      ddlcategories.Items[0].Value = "0";
      ddlcategories.SelectedValue = Convert.ToString(Session["lblCategoryID"]);
}