关于同一个问题不仅仅是问题和文章,而且我还有一些相关的问题,希望得到一些答案。
我听说有两种方法可以找到按钮并添加处理程序或使用界面(检查来自here的两种方法)。你建议哪一种?
如果你能用一些代码来说明'Interface'选项,那么在我尝试继承它时,界面文件的类别在页面中是不可读的!
答案 0 :(得分:8)
第二个方法是IMO更好。第一个选择是将页面耦合到特定的母版页,这并不好。
所有文件都放在同一个文件夹中。
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();
}
}
}
}
还有其他方法。例如。您可以通过event broker发布活动。
答案 1 :(得分:0)
从我的Openion中看,最好是使用事件处理程序......甚至使用自定义委托......
像这样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/////
}
通过这种方式提供一些灵活性,如果将来你想要在点击时传递一些数据导览内容页面,就可以轻松实现。