加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 将服务器端事件添加到扩展程序控件

发布时间:2020-12-16 06:55:44 所属栏目:asp.Net 来源:网络整理
导读:我有一个扩展程序控件,在用户输入完成后500ms引发文本框的OnTextChanged事件.这个问题是当文本框失去焦点时会引发OnTextChanged,这会导致问题(因为回发). 我想做的是给扩展器控制它自己的服务器端事件(比如OnDelayedSubmit),所以我可以单独处理它.该事件将起
我有一个扩展程序控件,在用户输入完成后500ms引发文本框的OnTextChanged事件.这个问题是当文本框失去焦点时会引发OnTextChanged,这会导致问题(因为回发).

我想做的是给扩展器控制它自己的服务器端事件(比如OnDelayedSubmit),所以我可以单独处理它.该事件将起源于扩展器控件的行为脚本(在500ms延迟之后),因此将__doPostBack置于onchanged中是不可取的.

任何人都可以阐明如何解决这个问题吗?

解决方法

在充分阅读了扩展程序控件和 JavaScript之后,我拼凑了一个迄今为止似乎正在运行的解决方案.

主要技巧是从服务器端获取必要的回发代码到客户端行为脚本.我通过使用ExtenderControlProperty(在控件的OnPreRender函数中设置),然后在行为脚本中进行评估来完成此操作.剩下的就是基本的事件处理.

所以现在我的扩展器控件的.cs文件看起来像这样:

public class DelayedSubmitExtender : ExtenderControlBase,IPostBackEventHandler
{
    // This is where we'll give the behavior script the necessary code for the 
    // postback event
    protected override void OnPreRender(EventArgs e)
    {
        string postback = Page.ClientScript.GetPostBackEventReference(this,"DelayedSubmit") + ";";
        PostBackEvent = postback;
    }

    // This property matches up with a pair of get & set functions in the behavior script
    [ExtenderControlProperty]
    public string PostBackEvent
    {
        get
        {
            return GetPropertyValue<string>("PostBackEvent","");
        }
        set
        {
            SetPropertyValue<string>("PostBackEvent",value);
        }
    }

    // The event handling stuff
    public event EventHandler Submit;  // Our event

    protected void OnSubmit(EventArgs e)  // Called to raise the event
    {
        if (Submit != null)
        {
            Submit(this,e);
        }
    }

    public void RaisePostBackEvent(string eventArgument)  // From IPostBackEventHandler
    {
        if (eventArgument == "DelayedSubmit")
        {
            OnSubmit(new EventArgs());
        }
    }

}

我的行为脚本看起来像这样:

DelayedSubmitBehavior = function(element) {
    DelayedSubmitBehavior.initializeBase(this,[element]);

    this._postBackEvent = null; // Stores the script required for the postback
}

DelayedSubmitBehavior.prototype = {
    // Delayed submit code removed for brevity,but normally this would be where 
    // initialize,dispose,and client-side event handlers would go

    // This is the client-side part of the PostBackEvent property
    get_PostBackEvent: function() {
        return this._postBackEvent;
    },set_PostBackEvent: function(value) {
        this._postBackEvent = value;
    }

    // This is the client-side event handler where the postback is initiated from
    _onTimerTick: function(sender,eventArgs) {
        // The following line evaluates the string var as javascript,// which will cause the desired postback
        eval(this._postBackEvent);
    }
}

现在,服务器端事件的处理方式与处理任何其他控件上的事件的方式相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读