Asp.net回发正在触发javascript应该在页面加载中

时间:2019-03-29 16:35:20

标签: javascript jquery asp.net

我发现一些可以上传文件的Javascript效果很好。但是,当我在asp.net页面上添加搜索时,它会触发回发以清除文件。这是不断触发$(document).on(“ click”,“ #attachedfiles tr”,function()的行 我已经尝试过“加载”,“就绪”,并且.back总是会触发javascript。 应该使用什么来确保仅在初始页面加载时触发javascript?这是完整的脚本。

    $(function () {

        var fileExt = "";

        var fileDesc = "";

        fileExt = "*.jpg;*.jpeg;*.gif;";

        fileDesc = "Allowed Files ";

        fileExt += "*.mp3;*.wav";

        fileExt += "*.flv;*.mpg;*.mp4;*.avi";

        fileExt += "*.html,*.htm,*.doc;*.docx;*.pdf;*.rtf;*.txt,*.csv,*.xsl;*.xslx";

        $("[id*=FileUpload1]").uploadify({

            'swf': 'scripts/uploadify.swf',

            'buttonText': 'Attach Files',

            'uploader': 'uploadVB.ashx?key=<%=Key %>',

            'method': 'post',

            'fileSizeLimit': '12MB',

            'fileTypeDesc': fileDesc,

            'fileTypeExts': fileExt,

            'multi': true,

            'auto': true,

            'onSelect': function (event, ID) {

                $('#btnSendx0').prop('disabled', true);

                $("#attachedfiles tr").each(function () {

                    if ($("td", this).eq(0).html() == event.name) {

                        alert(event.name + " already uploaded.");

                        $('#btnSendx0').prop('disabled', false);

                        $("#FileUpload1").uploadify('cancel');

                        return;

                    }

                });

            },

            'onUploadComplete': function (event, ID, file, response, data) {

                $('#btnSendx0').prop('disabled', false);

                $("#attachedfiles").append("<tr class='someclass'><td>" + event.name + "</td><td><a href='javascript:;' >[x]</a></td></tr>");

            }

        });

    });



    $(document).on("click", "#attachedfiles tr", function () {

        console.log($(this).attr('someclass'));

        var row = $(this).closest("tr");

        var fileName = $(this).closest('tr').find('td').eq(0).html();

        var href = $(this).find("a").attr("href");

        $.ajax({

            type: "POST",

            url: "sendEmails.aspx/RemoveFile",

            data: '{fileName: "' + fileName + '", key: "<%=Key %>" }',

                    contentType: "application/json; charset=utf-8",

                    dataType: "json",

                    success: function () { },

                    failure: function (response) {

                        alert(response.d);

                    }

                });

                row.remove();

            });

1 个答案:

答案 0 :(得分:0)

我认为您遗漏了一点:每次回发时,都会重新加载HTML页面。 HTML是无状态的,但是使用POST和ViewState,ASP.NET可以模拟全状态的HTML。 这可能是一团糟:您认为页面未完全加载,而是页面已加载,并且每次使用runat =“ server”元素(updatepanel和其他对ajax友好的控件除外)完成请求时,数据都会重新填充。与请求之前的数据相同。

因此,要点是HTML(当浏览器解释HTML时将执行javascript),无法“直接”知道是第一次还是x时间加载(理论上可以通过引用者获得,但是正在开发中)这个问题的正确逻辑……与PostBack或其他ASP.NET机制无关)。

要回答您的问题,请尝试仅在非回发时才呈现脚本,在页面中创建受保护的字符串loadInitialScript()方法,如果不是回发,则以字符串形式返回脚本,否则返回string.Empty。然后在您的脚本标签中:

<script type="text/javascript>
    <%=loadInitialScript()%>
</script>

因此,如果是回发,则loadInitialScript方法将返回一个空字符串,否则它将返回javascript函数(我建议使用$(document).on(“ ready”))并执行。