在后面的代码中调用按钮的 OnClientClick

Invoke OnClientClick of button in code behind

我的 aspx 网页中有一个按钮,在我的 c# 代码后面的代码中应该是 'clicked'。 OnClientClick 方法然后调用 JS 确认对话框,因此 btn_Click 函数仅在用户单击 'OK'...

时执行

到目前为止,这是我的代码: 变量 1

aspx:

<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" />

aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
       // set OnClientClick 
       btnConfirm.OnClientClick = "confirm('Save in DB?');";

       // invoke method
       Type t = typeof(System.Web.UI.WebControls.Button);
       object[] p = new object[1];
       p[0] = EventArgs.Empty;
       MethodInfo m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
       m.Invoke(btnConfirm, p);
}
protected void btnConfirm_Click(object sender, EventArgs e)
    {
        //save something in database
    }

通过以下方式获得代码示例:http://forums.asp.net/t/1046550.aspx?How+do+you+raise+a+button+click+event+from+outside+the+button+

我想调用 OnClientClick 方法,但是当我将 'OnClick' 替换为 'OnClientClick' 时出现此错误:

System.NullReferenceException was unhandled by user code Message=Object reference not set to an instance of an object.

编辑: 变体 2:

我试着像这样重写我的程序: aspx:

<script language="javascript">
function invokeButtonClick() {
        document.getElementById("btnConfirm").click();
    }

    function Validate() {
        return confirm('Save in db?');
    }
</script>
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" OnClientClick="return Validate();" />

aspx:cs:

protected void Page_Load(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "InvokeButton", "invokeButtonClick();", true);
}

protected void btnConfirm_Click(object sender, EventArgs e)
{
   // save something in database
}

但是在我的 btnConfirm_Click 函数被调用之前页面回发...

谢谢,

迈克尔

您需要在按钮点击时添加这两个事件。 OnClientClick 处理客户端脚本代码,OnClick 处理服务器端事件调用。
所以添加两个事件和那里的处理程序。 NullReferenceException 你因此得到的。

<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" OnClientClick="return Validate();" />

并且在您的 javascript 代码中可以是

function Validate(){
     if (valied())
        return true;
    return false;
}

如果 OnClientClick 的 return 值为 true,则将触发代码隐藏 OnClick 事件。如果 OnClientClick 被 returned false 那么它就不会。

如果 OnClientClick 没有 return 任何代码隐藏事件都会触发。所以你想要..

<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" />

<script language="javascript">
    function Validate() {
        return confirm('Save in db?');
    }
</script>

代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
   // set OnClientClick 
   btnConfirm.OnClientClick = "return Validate();";
}

protected void btnConfirm_Click(object sender, EventArgs e)
{
    //save something in database
}

更新:

这个post刚刚引起我的注意,不知道为什么我没有把它包含在我原来的post中,但是你可以在aspx标签中使用'OnClientClick':

<asp:Button runat="server" ID="btnConfirm" OnClientClick="return Validate();" Text="Confirm" OnClick="btnConfirm_Click" />

<script language="javascript">
    function Validate() {
        return confirm('Save in db?');
    }
</script>

100% 代码后确认!有时当您想删除或更新某些内容时,asp.net 中的代码隐藏或服务器端确认非常烦人,经过长时间搜索后,我得到了如下解决方案:

<asp:Button ID="btnSave" runat="server" Text="Save" OnClientClick="return confirm('Are you sure to BLOCK this customer ?')" OnClick="btnSave_Click" />

现在,每当您单击此按钮时,它都会要求确认,如果您 select "NO" 页面将不会 post,如果您 select "Yes" 然后页面将 post 并且您的按钮单击事件将被触发...如下所示

后面的代码:

protected void Page_Load(object sender, EventArgs e)
    {
    } 

 // Before coming here,,,there will be confirmation   
 protected void btnSave_Click(object sender, EventArgs e)
    {
      GetCustomerInfo();
    }