OnClientClick = true不会触发服务器端代码

时间:2015-10-22 09:00:50

标签: javascript asp.net

我有一个asp.net页面,我希望在触发服务器端事件之前显示确认对话框。

但是,当用户单击“确定”按钮时,它不会触发服务器端事件。

我已尝试过发布的其他问题中提到的所有内容。

我认为问题可能是因为我还在使用更新面板:

以下是代码:

<asp:ScriptManager runat="server"></asp:ScriptManager>
    <asp:UpdatePanel runat="server" ID="myUpdatePanel" UpdateMode="Conditional">
         <ContentTemplate>
             <asp:Hyperlink runat="server" ID="InstanceHyperlink" Visible="false"></asp:Hyperlink><asp:Button runat="server" Visible="false" ID="DeleteInstance" OnClick="DeleteInstance_Click"  Text="Delete Instance"/>
                 <asp:Button runat="server" OnClientClick="if ( ! createInstanceConfirm()) { return false; }" OnClick="CreateInstance_Click1" ID="CreateInstance" UseSubmitBehavior="false" Text="Create Instance"></asp:Button>
        </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="CreateInstance" EventName="Click"/>
    </Triggers>
</asp:UpdatePanel> 

使用Javascript:

<script type="text/javascript">
    function createInstanceConfirm() 
    {
       UIkit.modal.confirm("You are about to create a new instance", function ()
       { 
           return true; 
       });
    }
</script>

3 个答案:

答案 0 :(得分:6)

您将返回false但如果您不想取消回发,则必须返回true

所以而不是:

OnClientClick="if ( ! createInstanceConfirm()) { return false; }"

你可以使用它(假设该方法返回truefalse):

OnClientClick="return createInstanceConfirm();"

之前我没有使用过这个组件,但你可以试试这个:

function createInstanceConfirm() 
{
   bool confirmed = UIkit.modal.confirm("You are about to create a new instance", function ()
   { 
       return true; 
   });
   return confirmed;
}

答案 1 :(得分:0)

您是否尝试从ASyncPostBackTrigger中删除EventName属性 - 不要认为这是必需的。检查页面源一旦呈现,看看哪些事件链接到相关按钮。

答案 2 :(得分:0)

我发现这是使用回调,我设法通过调用另一个手动在按钮上发回帖子的Javascript函数来使其工作:

  function createInstanceConfirm() {
        return UIkit.modal.confirm("You are about to create a new instance for Development", function () {
            JSFunction();
        });
    }

     function JSFunction() {
             __doPostBack('<%= CreateInstance.ClientID  %>', '');
         }

它的工作方式与JQuery确认对话框相同。