0

我有一个控件,上面有几个更新面板。然后将控件加载到(非模态)JQueryUI 对话框中。在大多数情况下,这可以正常工作——我可以让控件上的按钮触发和更新控件的部分,这些部分最终将作为 JQueryUI 对话框的一部分显示给用户。

当事情混在一起时,问题就来了。在我的主页上,有一个链接可以重新打开主对话框并调用它以前的状态。最终这调用了一个简单的javascript:

function openDialog(id, name)
{
   // Tell asp.net code behind what we're trying load
   var formField = document.getElementById('<%= userControl1.idField.ClientID %>');
   formField.value = id;

   // Tell asp.net to refresh the contents
   __doPostBack('<%= userControl1.documentUpdatePanel.ClientID %>', '');

   $("#dialog-editDoc").dialog
        ({
            width: 400,
            resizable: true,
            open: function ()
            {
                // This is impotant for ASP.NET
                $(this).parent().appendTo($("form:first"));
                $(this).dialog("option", "title", "Editing Document - " + name);
            }
        });

}

这似乎工作正常,我PageLoad()在我的用户控件代码中得到了事件,并且我能够适当地更改内容。但是,当对话框出现时,刚刚更改为PageLoad().

奇怪的是,单击用户控件上的按钮,事件正确触发,并且我能够在显示对话框时进行更改。在显示之前(或显示状态)让对话框“更改状态”似乎有些困难。

那么,有没有人知道解决这个问题的方法?我尝试过的其他事情:

  • 进入函数——同样的问题__doPostBack(...)open:

编辑:

以下是用户控件在页面上的加载方式(它不在更新面板中,更新面板在文档编辑器控件内):

<div id="dialog-editDoc" class="dialogContent" title="{Context Sensitive}">
    <mylib:DocEditor ID="userControl1" runat="server" />
</div>  
4

1 回答 1

0

经过大量调试后,我确定上面链接的代码在所有情况下都可以工作,除非触发 JS 事件的链接/按钮/... 在UpdatePanel.

那么我是如何解决这个问题的。好吧,由于按钮已经在里面,UpdatePanel我可以附加到它的正常OnClick事件,而不必担心整个页面刷新。在这种情况OnClick下,我只是使用了从代码隐藏中调用 JS 函数的“标准”方式 via RegisterStartupScript,例如:

string JSFunction = "openDialog('id_goes_here','name_goes_here')";
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "runJS", jsFunction, true);

奇怪的是,这似乎有效。不完全确定为什么。最终,JS 仍然完成所有工作,调用结构(通过调试器观察)是相同的。

如果有人可以解释为什么上述方法有效,而不仅仅是直接通过调用 JS 函数OnClientClick,我将接受/赞成他们的答案,而不是我的。

于 2013-09-21T20:47:41.797 回答