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

Zer*_*One 3 c# asp.net asp.net-webpages

我的aspx网页上有一个按钮,应该在c#代码后面的代码中"点击".OnClientClick方法然后调用JS确认对话框,因此只有当用户单击"确定"时才执行btn_Click函数...

这是我的代码到目前为止: Variante 1

ASPX:

<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" />
Run Code Online (Sandbox Code Playgroud)

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
    }
Run Code Online (Sandbox Code Playgroud)

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

我想调用OnClientClick方法,但是当我用'OnClientClick'替换'OnClick'时,会出现以下错误:

用户代码未处理System.NullReferenceException消息=未将对象引用设置为对象的实例.

编辑: Variante 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();" />
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

迈克尔

Hug*_*tes 7

如果OnClientClick返回值为true,OnClick则将触发codebehind 事件.如果OnClientClick返回false则不会.

如果OnClientClick不返回任何内容,则无论如何都会触发codebehind事件.所以你要..

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

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

代码隐藏:

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
}
Run Code Online (Sandbox Code Playgroud)

更新:

这篇文章刚引起我的注意,不知道为什么我没有把它包含在原帖中,但是你可以在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>
Run Code Online (Sandbox Code Playgroud)


Mah*_*esh 5

您需要在按钮单击上添加两个事件.OnClientClick处理客户端脚本代码并OnClick处理服务器端事件调用.
所以添加两个事件和那些处理程序.NullReferenceException你是因为这个而得到的.

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

并且在你的javascript代码中可以

function Validate(){
     if (valied())
        return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)