我有一组页面,每个页面用于提示用户输入数据并在数据库中为这些数据创建记录。
我对所有页面使用相同的技术.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;
}
}
答案 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等的面板。