【问题标题】:C# - Reload tabs from Master pageC# - 从母版页重新加载选项卡
【发布时间】:2011-06-07 18:15:48
【问题描述】:

我的母版页中有一个 FromDate 和 ToDate 文本框以及一个提交按钮。我有 4 个选项卡,其中包含用于显示各种报告的 4 个不同 URL 的链接。

现在更改日期并单击提交按钮后,我可以根据日期更改更新/重新加载报告(选项卡)吗?

提前非常感谢:)

【问题讨论】:

    标签: c# asp.net tabs master-pages


    【解决方案1】:

    我建议将您的开始日期和提交按钮移至用户控件。然后,您可以将其放在每个报告中,在您的控件上公开和连接更改的事件,并为您的当前文本框公开属性以弹出到您的报告中。

    在 Visual Studio 中创建一个用户控件。如果您不确定如何执行此操作,请尝试this 链接。

    用您的文本框填充用户控件。像这样的:

    <div>
    
    <asp:Label ID="FromDateLabel" Text="From:" AssociatedControlID="FromDateTextBox" runat="server" />
    <asp:TextBox ID="FromDateTextBox" runat="server" />
    
    <asp:Label ID="ToDateLabel" Text="To:" AssociatedControlID="ToDateTextBox" runat="server" />
    <asp:TextBox ID="ToDateTextBox" runat="server" />
    
    <asp:Button ID="UpdateButton" Text="Update" runat="server" 
            onclick="UpdateButton_Click" />
    
    </div>
    

    以及该控件背后的代码。您需要公开一个事件和两个属性,如下所示:

    public partial class ReportDateControl : System.Web.UI.UserControl
    {
        public event EventHandler UpdateReport;
        public string FromDate
        {
            get { return this.FromDateTextBox.Text; }
            set { this.FromDateTextBox.Text = value; }
        }
        public string ToDate
        {
            get { return this.ToDateTextBox.Text; }
            set { this.ToDateTextBox.Text = value; }
        }
    
        protected void UpdateButton_Click(object sender, EventArgs e)
        {
            if (UpdateReport != null)
            {
                UpdateReport(this, EventArgs.Empty);
            }
        }
    }
    

    在您的 .aspx 页面中,您需要注册控件,这可能是这样的:

    <%@ Register Src="~/Controls/ReportDateControl.ascx" TagPrefix="myapp" TagName="ReportDateControl" %>
    

    然后实际放到页面上:

    <myapp:ReportDateControl id="ReportDateControl" 
                             runat="server" 
                             OnUpdateReport="ReportDateControl_UpdateReport" />
    

    然后连线后面的代码来处理更新事件:

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void ReportDateControl_UpdateReport(object sender, EventArgs e)
        {
            Controls.ReportDateControl control = (Controls.ReportDateControl)sender;
    
            string fromDate = control.FromDate;
            string toDate = control.ToDate;
    
        }
    }
    

    在适当的地方更改名称和格式,但这应该会给你一个好主意。

    【讨论】:

    • 谢谢,如何将它们移动到用户控件?你能给我举个例子吗..
    • 非常感谢杰,它完全有效,你让我开心!如果我需要向该用户控件添加更多内容怎么办?说下拉菜单……还是列表框?
    • 您可以将任何您喜欢的内容添加到用户控件中。然而,这可能是一个陷阱。用户控件应该简单且具有单一目的,否则重用的机会就会减少;就像一般规则一样。像添加到常规页面一样添加控件,然后公开重要属性,例如此处为文本框所做的操作。
    • 哦,我已经这样做了。我可以访问选定的值..但是如何直接访问下拉列表?我应该使用 FindControl 吗?它不起作用!
    • 您始终可以通过控件上的属性公开控件本身,但是将其设为只读。
    【解决方案2】:

    此外,您可以从母版页公开 Date 控件并通过 Page.Master 属性访问它们。您需要转换为母版页的特定类型才能获取其属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      相关资源
      最近更新 更多