首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventArgs与方法

EventArgs与方法
EN

Stack Overflow用户
提问于 2015-02-03 13:54:09
回答 2查看 163关注 0票数 0

我目前正在连接一个用户控件,该控件有一个按钮单击,该按钮被冒泡到母版页。我看过很多帖子来达到我目前的位置,但我不确定我是否按照正确的方式完成了工作,以及我是否得到了最好的抽象级别。

我正在使用自定义事件,如下所示:

代码语言:javascript
复制
public class JumpEventArgs : EventArgs
{
    readonly int _supplierID;

    public int SupplierID
    {
        get { return _supplierID; }
    }

    public JumpEventArgs(int supplierID)
    {
        supplierID.ThrowDefault("supplierID");

        _supplierID = supplierID;
    }
}

在用户控件中,我有这样一个:

//应该将其抽象出用户控制之外吗?

代码语言:javascript
复制
    public event EventHandler<JumpEventArgs> Jumped;

    protected void LinkButtonJump_Click(object sender, EventArgs e)
    {
        var handler = Jumped;

        if (handler != null)
        {
            var args = new JumpEventArgs(ProductID);
            Jumped(this, args);
        }
    }

我的母版页处理程序做了一些对跳转事件是通用的事情,还有一些是对页面显式的。我一直在考虑如何把两者结合起来。

以下是主页:

代码语言:javascript
复制
    void AddEventHandlers()
    {
        var jumpCtls = this.DeepFind<JumpButton>();
        jumpCtls.ForEach(uc => uc.Jumped += new EventHandler<JumpEventArgs>(JumpCtl_Clicked));
    }

    void JumpCtl_Clicked(object sender, JumpEventArgs e)
    {
        var j = new JumpEvent(e); // this is generic and can be reused
        j.AddTrack();

        MobileSearch.VisitedList.Refresh(); // this is master page only
    }

这是跳跃课:

//应该与JumpEventArgs类合并吗?

代码语言:javascript
复制
public class JumpEvent
{
    readonly JumpEventArgs _args;

    public void AddTrack()
    {
        // do something
    }

    public JumpEvent(JumpEventArgs args)
    {
        args.ThrowNull("args");
        _args = args;
    }

    JumpEventArgs Args
    {
        get { return _args; }
    }
}

我不确定是母版页面处理程序,它将事件传递给一个泛型类"JumpEvent“--这似乎不太正确--我可能考虑过了,但最后我不确定。

任何建议都很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-03 14:09:09

你只需要用一个普通的按钮就可以了。看起来您的JumpButton并没有做比标准按钮更多的事情,所以它似乎只是增加了不必要的复杂性。

代码语言:javascript
复制
<asp:Button id="JumpBtn" OnClick="JumpBtn_Click" CommandArgument="Supplier3" runat="server" Text="Jump!" />

代码背后:

代码语言:javascript
复制
protected void JumpBtn_Click(object sender, EventArgs e)
{
    var supplierId = JumpBtn.CommandArgument; //do something with supplierId
    MobileSearch.VisitedList.Refresh();
}

可以使用内联数据绑定表达式动态绑定CommandArgument。如果您的JumpBtn应该在某种控件模板(如Repeater )中,您也可以将发送方转换为Button类。

票数 0
EN

Stack Overflow用户

发布于 2015-02-03 14:33:42

这并不复杂。

向页面添加按钮

代码语言:javascript
复制
<asp:Button ID="ButtonAction" OnClick="ButtonAction_Click" runat="server">
    Jump!
</asp:Button>

将单击事件传递给自定义事件

代码语言:javascript
复制
protected void ButtonAction_Click(object sender, EventArgs e)
{
    if (this.Jumped != null)
    {
        this.Jumped(this, this.ProductId);
    }
}

您的自定义事件

代码语言:javascript
复制
public event EventHandler<int> Jumped;

然后在母版页中使用它

代码语言:javascript
复制
void JumpCtl_Clicked(object sender, int e)
{
    var supplierId = e;
    // Do what you want
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28300641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档