为什么回发时控件消失

Why control disappears on post back?

本文关键字:控件 消失 为什么      更新时间:2023-09-26

我在针对UpdatePanel内部控件的网络表单中使用了TINYmCE。

它曾经在页面加载时工作,但在部分回发时不断消失,即选定的索引更改事件等,所以我在该事件中使用了一个方法

ScriptManager.RegisterClientScriptBlock(this.Page, typeof(string), txtBoxBody.ClientID, "TinyEditor()", true);

现在它不会消失。所以我把它放在每个可能导致回发的事件中,但问题是它只出现一次,例如,如果发生一次回发,那么它不会消失,但之后如果我进行第二次回发,它会消失。它仅适用于任何控件上的首次回发。

.aspx代码:

 <script type="text/javascript">
        function TinyEditor() {
            tinymce.init({
                selector: '#<%=txtBoxBody.ClientID%>',
                script_url: "../../tinymce/js/tinymce/tinymce.min.js",
                height: 200,
                theme: 'modern',
                plugins: [
                  'advlist autolink lists pagebreak',
                  //'searchreplace wordcount visualblocks visualchars fullscreen',
                  'insertdatetime save contextmenu directionality',
                  ' paste textcolor textpattern print'
                ],
                toolbar1: 'insertfile undo redo | fontsizeselect | forecolor emoticons | fontselect emoticons | styleselect | bold italic | alignleft aligncenter alignright alignjustify',
                //toolbar2: 'print preview media | forecolor backcolor emoticons',
                //image_advtab: true,
                fontsize_formats: '8pt 9pt 10pt 11pt 12pt 14pt 18pt 20pt 22pt 24pt 26pt 28pt 36pt 48pt 72pt',
                //templates: [
                //  { title: 'Test template 1', content: 'Test 1' },
                //  { title: 'Test template 2', content: 'Test 2' }
                //],
                content_css: [
                  '//fast.fonts.net/cssapi/e6dc9b99-64fe-4292-ad98-6974f93cd2a2.css',
                  '//www.tinymce.com/css/codepen.min.css'
                ]
            });
        }


    </script>

您可以尝试稍微不同的方法。当您使用 UpdatePanel 时,它会生成一些 JS 帮助程序函数和事件,您可以连接到这些函数和事件:

<script type="text/javascript">
   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler_Page);
   function EndRequestHandler_Page(sender, args) {
       TinyEditor();
   }
   $(document).ready(function () {
       TinyEditor();
   });
</script>

这样你就不需要调用 ScriptManager.RegisterClientScriptBlock。