jQuery Click vs User单击ASP.NET中的不同行为

时间:2012-02-01 18:02:18

标签: jquery asp.net user-controls

问题如下:

我在UserControl_2中有一个UserControl_1,UserControl_1有一个由UserControl_2订阅的事件。在UserControl_1中单击按钮时会触发此事件。

当用户手动点击此按钮时,一切正常,并且事件很好地路由到UserControl_2中的处理程序,,当通过jQuery单击此按钮时,事件未被路由到UserControl_2。

问题是,在调用UserControl_1中的按钮处理程序这一事实时,当尝试将事件路由到UserControl_2时,处理程序为空,就像没有控件订阅它一样。

在UserControl_1中路由/冒泡事件的代码如下:

public event MyFileUploadCommandEventHandler UploadDone;

protected virtual void OnUploadDone(MyFileUploadCommandEventArgs e)
        {
            if (UploadDone != null)
            {
                UploadDone(this, e);
            }
        }

这里,当通过点击jQuery调用时,UploadDone处理程序始终为null。

我的jQuery方法我已经用两种方式进行了测试,结果相同:

function DoneCallback() {
        $("[id*='btnDoneCallback']").click();
    }

function DoneCallback() {
        __doPostBack('<%=btnDoneCallback.UniqueID%>', '');
    }

用户点击和导致此行为的jQuery点击事件有什么区别?

谢谢!

3 个答案:

答案 0 :(得分:2)

我通过将控件的id作为javascript函数的参数传递来解决它:

function DoneCallback(ctl) {
    var id = '#' + ctl;
    $(id).click();
}

并将其称为:

<div onclick="javascript:DoneCallback('<%=btnDoneCallback.ClientID%>');">CLICK ME!</div>

感谢您的帮助!

答案 1 :(得分:0)

我认为您需要在jquery-click-function中找到该表单,然后提交它;类似的东西:

$(this).parents("form:first").submit();

实际上,那是错的。你很可能需要执行那些asp.net希望用服务器上的相应事件处理程序连接点击的JS。要在服务器上生成此类JS(以便客户端执行),您可以使用以下方法:

this.Page.ClientScript.GetPostBackEventReference()
this.Page.ClientScript.GetPostBackClientHyperlink()

它们返回您需要呈现给页面的字符串(javascript代码),然后在适当时从您的jquery-click调用它。

答案 2 :(得分:0)

ASP.NET在点击时触发__doPostBack(eventtarget, eventarguments)功能。我不完全确定为什么在控件上调用.click()不会传播TBH。但是您应该在用户控件中公开一个属性来公开此函数:

public string ClientPostbackFunction
{
    get { return ClientScript.GetPostBackEventReference(Button1, "argument", false); }
}

然后你可以用JQuery绑定它:

$("#button").click(function() { <%= UserControl1.ClientPostbackFunction %> });