如何在内容页处理母版页按钮事件?

7

有很多关于同一个问题的问题和文章,但我还有几个相关问题,希望得到一些答案。

  1. 我听说过两种方法来查找按钮并添加处理程序或使用接口(从这里检查这两种方法)。你建议哪一个?

  2. 如果您可以用一些代码说明“接口”选项,并在哪里分类接口文件,因为当我尝试继承它时,它无法在页面上读取!

3个回答

8
第二种方法在我看来更好。第一种选择将页面与特定的母版页耦合在一起,这不太好。
所有文件都放置在同一个文件夹中。
IPageInterface.cs:
namespace CallFromMasterPage
{
    public interface IPageInterface
    {
        void DoSomeAction();
    }
}

Default.aspx.cs:

namespace CallFromMasterPage
{
    public partial class Default : System.Web.UI.Page, IPageInterface
    {
        public void DoSomeAction()
        {
            throw new NotImplementedException();
        }
    }
}

Site.Master.cs:

namespace CallFromMasterPage
{
    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        protected void Button1_Click(object sender, EventArgs e)
        {
            IPageInterface pageInterface = Page as IPageInterface;
            if (pageInterface != null)
            {
                pageInterface.DoSomeAction();
            }
        }
    }
}

还有其他方法。例如,您可以通过事件代理发布事件。


好的,这很棒,但我有一个问题..正确的位置放置接口文件是什么?我正在使用N-Tier架构PL、BLL、DAL?我真的卡在这个细节上了,因为我的页面代码后台文件即使我将它放在同一个文件夹中或者尝试添加一个App_Data文件夹,也看不到我的接口! - Mazen Elkashef
你使用网站还是网络应用程序项目? - Jakub Linhart
跟进一个问题,希望你不介意。你的代码运行得很好,但是我不理解这一部分:“IPageInterface pageInterface = Page as IPageInterface;”。你能稍微解释一下吗? - Mazen Elkashef
我的代码返回NULL,因此我需要执行一个postback :/ - SearchForKnowledge

0

我在我的MasterPage中有一个日历,但我需要使用这个日期来绑定ContentPage中的数据表格。

MasterPage html:

<asp:Calendar ID="calAgenda" DefaultView="Days" Format="dd/MM/yyyy" runat="server" BackColor="White" CssClass="templeteCalendar" Visible="false" OnSelectionChanged="calAgenda_SelectionChanged"></asp:Calendar>

ContentPage html:

<asp:TextBox runat="server" ID="txtFechaBusqueda" CssClass="form-control templeteLabel" MaxLength="10" />

MasterPage C# 代码:

protected void calAgenda_SelectionChanged(object sender, EventArgs e)
{
    TextBox txtCalendarDate = (TextBox)ContentPlaceHolder1.FindControl("txtFechaBusqueda");
    txtCalendarDate.Text = calAgenda.SelectedDate.ToString().Substring(0, 10);
}

在这里,我们在ContentPage中使用了一个EventHandler来捕获MaserPage中的点击事件。
ContentPage C#代码:
Calendar btnCalendar = Master.FindControl("calAgenda") as Calendar;
btnCalendar.SelectionChanged += new EventHandler(btnCalendar_Click);

然后,我们需要定义btnCalendar_Click函数。
protected void btnCalendar_Click(object sender, EventArgs e)
{
    DoSomething();
}

0
从我的观点来看,如果你使用事件处理程序的话会更好...甚至可以使用自定义委托...
就像这样
public delegate ReturnType MasterPageButtonHandler(CustomEventArgs ObjPriargs);
public event MasterPageButtonHandler MasterPagebuttonClick;
.
.
.
.
Button.click+=new EventHandler(Button1_Click);
.
.
.
protected void Button1_Click(Object sender,EventArgs e)
{
     if(MasterPagebuttonClick!=null)
     {
         CustomEventArgs ObjPriargs=new CustomEventArgs();
         ObjPriargs.Property1=SomeValu1;
         ObjPriargs.Property2=SomeValu2;
         MasterPagebuttonClick.Invoke(ObjPriargs);
     }
}
.
.
.
public class CustomEventArgs
{
      Public DataType Property1{get;set;}
      Public DataType Property2{get;set;}
      Public DataType Property3{get;set;}
}
.
.
.
//    Now in your aspx Page
MyMaster m=Page.Master as MyMaster;
m.MasterPagebuttonClick+=new MasterPageButtonHandler(MasterPageHandler_Click);
.
.
.
protected void MasterPageHandler_Click(CustomEventArgs ObjPriargs)
{
    //You code/////
}

通过这种方式进行操作可以提供一些灵活性,例如如果将来您想在单击时传递一些数据到内容页面...这是非常容易实现的。

我非常感激你的演出..但是你是在为你的博客做广告吗:S:D!!? - Mazen Elkashef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接