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

时间:2015-02-27 08:39:31

标签: 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" />

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方法,但是当我更换&#39; OnClick&#39;使用&#39; OnClientClick&#39;出现此错误:

  

System.NullReferenceException未被用户代码处理     Message =对象引用未设置为对象的实例。

编辑: 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();" />

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函数之前的页面回发被调用...

谢谢,

迈克尔

3 个答案:

答案 0 :(得分:7)

如果OnClientClick的返回值为 true ,则会触发代码隐藏OnClick事件。如果OnClientClick返回 false ,则表示不会。

如果OnClientClick没有返回任何内容,则无论如何都会触发代码隐藏事件。所以你想要......

<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
}

更新:

这篇文章引起了我的注意,不知道为什么我没有把它包含在原帖中,但你可以使用OnClientClick&#39;在aspx标签中:

<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>

答案 1 :(得分:5)

您需要在按钮单击上添加两个事件。 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;
}

答案 2 :(得分:2)

确认后100%代码!当你想要删除或更新某些内容时,某些内容对于后面的代码或者asp.net中的服务器端确认非常不感兴趣,我在经过长时间的搜索后得到了它的解决方案,如下所示:

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

现在,只要您点击此按钮,它就会要求确认,如果您选择&#34;否&#34;页面将不会发布,如果您选择&#34;是&#34;然后页面将发布,你的按钮点击事件将会激发......如下所示

代码背后:

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

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