查找使用母版页的页面控件的问题

时间:2011-04-13 02:09:08

标签: c# asp.net webforms

我有一组页面,每个页面用于提示用户输入数据并在数据库中为这些数据创建记录。

我对所有页面使用相同的技术.2个面板,第一个具有所有输入控件,默认情况下可见,第二个面板显示成功消息,默认情况下隐藏。

现在,当用户点击“提交”按钮时...如果数据有效,我写了几行来隐藏第一个面板并显示第一个面板..我有20个页面使用相同的技术所以作为一个好的做法,我在我的web项目中添加了一个类,它被称为Helper,用于搜索2个面板,然后隐藏并显示我需要的内容。

我为所有页面使用了相同的面板ID,因此我可以轻松使用它!

注意:我首先只是直接搜索面板,但它不起作用所以我试图搜索包含面板和内容的内容控件(因为此页面使用的是母版页)然后查找小组。两次尝试都无法解决!

public class Helpers
{
    public static void SuccessfulSubmission(Page p)
    {
        Content content = p.FindControl("Content2") as Content;
        Panel inputPanel = content.FindControl("inputPanel") as Panel;
        inputPanel.Visible = false;
    }
}

1 个答案:

答案 0 :(得分:1)

搜索内容控件永远不会有效,因为无论何时使用母版页,其控件都会插入到页面中,而页面的控件(在内容控件中)会被添加到相应的内容占位符中。也许,您应该首先尝试找到内容占位符,然后尝试找到控件。

但是,更好的设计是创建基页类以及特定的母版页来控制此交互。例如,

您将拥有一个母版页(比如名为TwoPanelMaster),它将使用您的站点母版页并使用两个面板布局和提交按钮。想法是你有通过母版页控制的标准布局。

  <asp:Panel runat="server" ID="InputPanel">
     <asp:ContentPlaceholder runat="server" ID="Input"></asp:ContentPlaceholder>
  </asp:Panel>
  <asp:Panel runat="Server" ID="Message">
     <!-- put the UI for displaying message -->
  </asp:Panel>
  <asp:Button runat="server" ID="Submit" />

在后面的主代码中公开方法以访问提交按钮,显示/隐藏面板等。

现在创建一个基本页面类来编写基本交互 -

public abstract class InputPage : System.Web.UI.Page
{
  protected override OnLoad(EventArgs e)
  {
     var master = this.Master as TwoPanelMaster;
     master.GetSubmitButton().OnClick += Submit_Click();
  }

  private void Submit_Click(object sender, EventArgs e)
  {
     ValidateInput();
  }

  protected virtual void ValidateInput()
  {
     // do some common code (if any)
     string message;
     if (OnValidateInput(out message))
     {
        // validation succesful, show success message
        var master = this.Master as TwoPanelMaster;
        master.ShowMessage(message); // this method should hide the input panel and display message panel.
     }
  }

  // pages should provide implementation of this method
  protected abstract bool OnValidateInput(out string successMessage);

}

这是一种通用的方法,可以让您更好地控制和删除依赖关系,使您的网页必须具有特定ID等的面板。