Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何才能与父母建立联系';什么事?_C#_Asp.net - Fatal编程技术网

C# 我如何才能与父母建立联系';什么事?

C# 我如何才能与父母建立联系';什么事?,c#,asp.net,C#,Asp.net,我有一个aspx文件,其中呈现的是一个ascx控件 aspx文件有一个按钮,单击该按钮会触发一个事件 我在ascx控件中有一个按钮,我想连接到同一个事件…但我不清楚如何做。我显然遗漏了一些相当基本的东西 我想应该是这样的: myButton.Click += new EventHandler(btn_Click); ... void btn_Click(object sender, EventArgs e) { <some way to get ahold of the par

我有一个aspx文件,其中呈现的是一个ascx控件

aspx文件有一个按钮,单击该按钮会触发一个事件

我在ascx控件中有一个按钮,我想连接到同一个事件…但我不清楚如何做。我显然遗漏了一些相当基本的东西

我想应该是这样的:

myButton.Click += new EventHandler(btn_Click);

...

void btn_Click(object sender, EventArgs e)
{
    <some way to get ahold of the parent aspx>.btn_Click(sender, e)
}
myButton.Click+=neweventhandler(btn\u Click);
...
无效btn_单击(对象发送者,事件参数e)
{
.btn\u单击(发件人,e)
}
但是,到目前为止,我运气不好,这让我怀疑我是不是找错人了


想法?

您需要在用户控件中创建一个事件处理程序,如下所示:

myButton.Click += new EventHandler(btn_Click);

...

void btn_Click(object sender, EventArgs e)
{
    <some way to get ahold of the parent aspx>.btn_Click(sender, e)
}
ASCX标记:

<asp:Button ID="UserControlButton" runat="server" OnClick="UserControlButton_Click" />
在页面中:

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" />
<uc:MyUserControl ID="UserControl1" runat="server" OnButtonClick="Button1_Click" />
protected void Button1_Click(object sender, EventArgs e)
{
    //if you need to differentiate one button from the other
    if (sender.Equals(Button1))
    {
        //page button logic
    }
    else
    {
        //user control button logic
    }
}

在用户控件中添加:

public Action<object,EventArgs> onMyButtonClick { get; set; }

...

protected void Page_Load(object sender, EventArgs e)
{    
    btn.Click += (s,ea) => { onMyButtonClick(sender, e); };
}    
MyButtonClick{get;set;} ... 受保护的无效页面加载(对象发送方、事件参数e) { 点击+=(s,ea)=>{onMyButtonClick(sender,e);}; } 在.aspx页面中添加:

protected Action<object,EventArgs> myClickAction = (s, a) => { /* your handling code goes here */ };

...

protected void Page_Load(object sender, EventArgs e)
{    
    myUserControlName.onMyButtonClick = myClickAction;
    btn.Click += (s,ea) => { myClickAction(s,ea); };
}
protectedaction myClickAction=(s,a)=>{/*您的处理代码在这里*/};
...
受保护的无效页面加载(对象发送方、事件参数e)
{    
myUserControlName.onMyButtonClick=myClickAction;
点击+=(s,ea)=>{myClickAction(s,ea);};
}

这样的办法应该行得通。(注意:这段代码没有经过测试,可能需要调整)

为什么不将逻辑封装在一个单独的类中,并在两种情况下调用它呢?因为它实际上并不是那么复杂的逻辑,而是在父页面上获取所有值并保存它们。因此,将逻辑封装到其他地方意味着发送大量的值,然后运行不太多的代码。你有权访问父页面的按钮吗?@Beska:为什么你的控件知道保存父页面的数据?我认为控制应该对其数据负责persistance@sll:不,我的部分问题是如何找到父页面的按钮(甚至只是父aspx)。如果我能做到这一点,我大概可以相当容易地参加同一个活动。我怀疑我让我的问题看起来比实际更复杂。我会使用
EventHandler
而不是Action委托。是的,它们是等效的,但EventHandler多年来一直是一个固定的标准,使用动作只会使代码复杂化。@PirateKitten我不同意,使用动作可以使代码更简洁,我将代码更新为更简洁一点。在我看来,它也是一种功能性更强的编程风格,更具可读性。另外请注意接受的答案,您必须转到4个文件才能进行更改以使其正常工作。在我的解决方案中,只落后2个代码。你可以一目了然地看到正在发生的事情。你不必影响4个文件,你可以像操作一样轻松地连接到CS页面加载中的处理程序,很多人都是这样做的。@PirateKitten当然,但这不是演示的解决方案。无论如何,有很多方法可以完成同样的事情,我觉得我的解决方案也更灵活。但这不值得争论,只要读者看到同一个问题的各种解决方案,他们就可以选择一个他们觉得最舒服、最适合自己情况的解决方案。我相信你的评论是对的,我错过了问题的一个要点,谢谢你,这一点已经解决了。我认为我仍然缺少一个关键元素,因为我不确定它到底是如何工作的。用户控件的OnButtonClick属性通过名称自动连接到ButtonClick EventHandler?是这样吗?佐夫。我的知识在这里有一个很大的漏洞。肯定是时候回去填补空白了。当点击usercontrol中的按钮时,usercontrol中的事件处理程序被触发。该事件处理程序还将usercontrol中的事件公开给页面,该事件可以通过页面上按钮的click事件来处理。我知道这听起来令人困惑,但这有意义吗?