【问题标题】:Pass master page control values on content page on page_load在 page_load 的内容页面上传递母版页控制值
【发布时间】:2020-05-05 01:50:20
【问题描述】:

我在母版页上有一个下拉列表,我想在加载内容页面时在内容页面上传递选定的值。我的问题是,只有当我更改下拉列表中的值时,该值才会传递。因此,当页面加载时,我必须从下拉列表中重新选择以捕获下拉列表的值。如果我正在浏览内容页面,则所选值不会在页面加载时传递。 我的母版页代码.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);                 
}

【问题讨论】:

  • 您在页面加载时的 DDL 中寻找什么价值?为什么要使用 Session 对象?您正在 DDL 中设置选定索引更改时选定值的值,这样它才会出现。我不知道你为什么要那样做。
  • 您是否在页面标记中声明了母版页的确切类型?
  • 您好,是的,我在标记上声明了 masterr 页面。我已设置选定的值以在用户浏览时保持选择。如果让您感到困惑,我可以发表评论。会话并不重要。我正在调用主控件而不是会话。我找到了这个链接,但答案对我没有多大帮助。 stackoverflow.com/questions/5933929/…

标签: c# asp.net master-pages


【解决方案1】:

试试这个解决方案:

母版页:

<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;
}

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

【讨论】:

  • 我在内容页面上出现此错误:System.Web.UI.MasterPage 不包含“SelectedValue”的定义并且没有扩展方法“SelectedValue”
  • 您需要在内容页标记 "" 上声明 MasterType 指令以访问母版页属性。您是否在内容页面的代码后面获得母版页的 SelectedValue 属性的智能?
  • 我有这个声明 MasterPageFile="~/mypath/mymaster.Master" 不,我不接受智能
  • 智能显示是 .FindControl 和其他一些。但不是 SelectedValue
  • 您是否在后面的母版页代码中声明了“SelectedValue”属性?这个对我有用。似乎您的解决方案中缺少一些东西。财产是公开的吗?声明 MasterType 指令后,构建智能解决方案。
【解决方案2】:

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

要解决此问题,您可以先在母版页中绑定您的 drobdownlist,而不是在“MasterPage 加载”中,您可以在“ContentPage Init”和“MasterPage 加载”之前发生的“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"]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多