【问题标题】:How can Submit Button's OnClick Event invoke both Server-Side and Client-Side Code?提交按钮的 OnClick 事件如何同时调用服务器端和客户端代码?
【发布时间】:2013-12-19 16:33:04
【问题描述】:

我正在使用名为 Metronic 的引导模板。下面的 asp:LinkBut​​ton 是简单的按钮控件。为了能够调用 ServerSide 事件处理程序 (SubmitButton_Click),我将其转换为 asp:LinkBut​​ton 控件。但这一次它没有调用 javascript 代码。我试过 OnClientClick。但是没用。

登录.aspx:

 <asp:LinkButton runat="server" ID="LinkButton1" CssClass="btn btn-default pull-right"
  onclick="SubmitButton_Click">Log In<i class="m-icon-swapright m-icon-white"></i>
 </asp:LinkButton>

<script>
    jQuery(document).ready(function () {
        App.init();
        Login.init();
    });
</script>

login.js 的一部分:

var Login = function () {

return {
    //main function to initiate the module
    init: function () {

       $('.login-form').validate({
            errorElement: 'label', //default input error message container
            errorClass: 'help-inline', // default input error message class
            focusInvalid: false, // do not focus the last invalid input
            rules: {
..
..
}

登录.aspx.cs:

protected void SubmitButton_Click(object sender, EventArgs e)
{
   ..
}

登录.js:

var Login = function () {

return {
    //main function to initiate the module
    init: function () {

       $('.login-form').validate({
            errorElement: 'label', //default input error message container
            errorClass: 'help-inline', // default input error message class
            focusInvalid: false, // do not focus the last invalid input
            rules: {
                username: {
                    required: true
                },
                password: {
                    required: true
                },
                remember: {
                    required: false
                }
            },

            messages: {
                username: {
                    required: "Username is required."
                },
                password: {
                    required: "Password is required."
                }
            },

            invalidHandler: function (event, validator) { //display error alert on form submit   
                $('.alert-error', $('.login-form')).show();
            },

            highlight: function (element) { // hightlight error inputs
                $(element)
                    .closest('.control-group').addClass('error'); // set error class to the control group
            },

            success: function (label) {
                label.closest('.control-group').removeClass('error');
                label.remove();
            },

            errorPlacement: function (error, element) {
                error.addClass('help-small no-left-padding').insertAfter(element.closest('.input-icon'));
            },

            submitHandler: function (form) {
                window.location.href = "/Default.aspx";
            }
        });

        $('.login-form input').keypress(function (e) {
            if (e.which == 13) {
                if ($('.login-form').validate().form()) {
                    window.location.href = "index.html";
                }
                return false;
            }
        });

        $('.forget-form').validate({
            errorElement: 'label', //default input error message container
            errorClass: 'help-inline', // default input error message class
            focusInvalid: false, // do not focus the last invalid input
            ignore: "",
            rules: {
                email: {
                    required: true,
                    email: true
                }
            },

            messages: {
                email: {
                    required: "Email is required."
                }
            },

            invalidHandler: function (event, validator) { //display error alert on form submit   

            },

            highlight: function (element) { // hightlight error inputs
                $(element)
                    .closest('.control-group').addClass('error'); // set error class to the control group
            },

            success: function (label) {
                label.closest('.control-group').removeClass('error');
                label.remove();
            },

            errorPlacement: function (error, element) {
                error.addClass('help-small no-left-padding').insertAfter(element.closest('.input-icon'));
            },

            submitHandler: function (form) {
                window.location.href = "index.html";
            }
        });

        $('.forget-form input').keypress(function (e) {
            if (e.which == 13) {
                if ($('.forget-form').validate().form()) {
                    window.location.href = "index.html";
                }
                return false;
            }
        });

        jQuery('#forget-password').click(function () {
            jQuery('.login-form').hide();
            jQuery('.forget-form').show();
        });

        jQuery('#back-btn').click(function () {
            jQuery('.login-form').show();
            jQuery('.forget-form').hide();
        });

        $('.register-form').validate({
            errorElement: 'label', //default input error message container
            errorClass: 'help-inline', // default input error message class
            focusInvalid: false, // do not focus the last invalid input
            ignore: "",
            rules: {
                username: {
                    required: true
                },
                password: {
                    required: true
                },
                rpassword: {
                    equalTo: "#register_password"
                },
                email: {
                    required: true,
                    email: true
                },
                tnc: {
                    required: true
                }
            },

            messages: { // custom messages for radio buttons and checkboxes
                tnc: {
                    required: "Please accept TNC first."
                }
            },

            invalidHandler: function (event, validator) { //display error alert on form submit   

            },

            highlight: function (element) { // hightlight error inputs
                $(element)
                    .closest('.control-group').addClass('error'); // set error class to the control group
            },

            success: function (label) {
                label.closest('.control-group').removeClass('error');
                label.remove();
            },

            errorPlacement: function (error, element) {
                if (element.attr("name") == "tnc") { // insert checkbox errors after the container                  
                    error.addClass('help-small no-left-padding').insertAfter($('#register_tnc_error'));
                } else {
                    error.addClass('help-small no-left-padding').insertAfter(element.closest('.input-icon'));
                }
            },

            submitHandler: function (form) {
                window.location.href = "index.html";
            }
        });

        jQuery('#register-btn').click(function () {
            jQuery('.login-form').hide();
            jQuery('.register-form').show();
        });

        jQuery('#register-back-btn').click(function () {
            jQuery('.login-form').show();
            jQuery('.register-form').hide();
        });
    }

};

}();

【问题讨论】:

  • 记得在OnClientClick上完成任何操作后返回true。
  • 或者,在客户端,您可以使用__doPostBack() 继续使用PostBack
  • 或者,在服务器端你可以使用RegisterStartupScript之类的东西来调用客户端。
  • 返回假;就我而言,这是缺少的一点。谢谢。但仅适用于警报(“Hello”)之类的东西。原始 js 代码仍然被忽略。我想是因为它放在 return{} 里面。我不知道 RegisterStartupScript 是什么。

标签: javascript jquery asp.net twitter-bootstrap


【解决方案1】:

使用 jQuery 选择器来处理由于LinkButton 被呈现为 HTML 所导致的锚点的点击,如下所示:

标记:

<asp:LinkButton runat="server" ID="LinkButton1" 
                CssClass="btn btn-default pull-right TheLinkButton"
                onclick="SubmitButton_Click">
    Log In<i class="m-icon-swapright m-icon-white"></i>
</asp:LinkButton>

注意:CssClass 值已添加 TheLinkButton,以便使用点 (.) 表示法而不是 ID (#) 选择器来制作更简单的 jQuery 选择器。主要原因是当使用 ASP.NET 和母版页时,命名容器会破坏控件的 ID,而类名不受影响。


JavaScript:

jQuery(document).ready(function () {
    App.init();
    Login.init();
    jQuery('.TheLinkButton').click(function() {
        // Do what you need to do on the client-side 
        // when the link button is clicked here

    });
});

【讨论】:

  • 它适用于警报(“Hello”)之类的东西。但它不适用于我需要的 js 代码。我认为它的问题在于,脚本包含在 return{} 中。 Cos 仍然忽略客户端。直接运行到服务器端
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 2012-08-08
相关资源
最近更新 更多