从JqueryDialog调用VB sub

时间:2014-05-06 23:05:43

标签: javascript jquery asp.net vb.net

所以我所拥有的是一个表单,这个表单的一部分将用于创建一个jquery对话框。从该对话框是一个从asp服务器控件创建的按钮,我将单击该按钮。服务器控件在后面的代码中有一个函数,单击时将调用该函数。我遇到的问题是后面的代码中的函数没有被调用。我缺少哪些基本的东西?这是aspx页面的样子,剥离到最低限度

<head>
<script>        
     function PreviewForm() {              
            $("#emailPreview").attr("style", "");
            $("#emailPreview").dialog({
                title: "Preview",
                width: "890px",
                modal: true
            });
        }               
</script>
</head>
<body>
<form id="EmailSend" method="post" runat="server">  
    <table>
        <tr>
            <td style="text-align:right">                                                   
                <input type="button" onclick="PreviewForm();" value="Preview" />                                                   
            </td>
        </tr>
    </table>    
    <div id="emailPreview" align="center" style="display:none">
        <fieldset>
           <table>
                <tr class="Row">
                    <td class="required">Subject:</td>
                    <td><asp:Label ID="lblSubj" Runat="server" /></td>
                </tr>
                <tr>
                    <td class="field" colspan="2" style="text-align:center">                       
                       <input id="btnBack" class="button" type="button" onclick="closeDialog(false);" value="Close" />&nbsp;                           
                       <asp:Button ID="Send" class="button" Runat="server" Text="Send"/>
                    </td>
                </tr>
            </table>
        </fieldset>
    </div>              
</form>        

和后面代码中的函数

Private Sub CmdSendClick(ByVal sender As System.Object, ByVal e As EventArgs) Handles Send.Click
    lblSubj.Text.Trim(), pBody)
End Sub

当我尝试调试代码时,事情没有发生,断点没有被击中。如果我要使按钮可见并从我创建的对话框外部单击,那么它将正常工作。

修改

我也尝试过将对话框隐藏在对话框之外,然后在对话框关闭后单击按钮。所以closeDialog函数看起来像这样一个新的输入按钮

function closeDialog(send) {
    console.log(send);
       if (send) {
           $("#emailPreview").dialog("close");
           GetFormControl('<%=Send.ClientID%>').click();  
           console.log(send + " TRUE");
        } else {
            $("#emailPreview").dialog("close");
            console.log(send + " false");
        }                
 }


<div id="emailPreview" align="center" style="display:none">
        <fieldset>
           <table>
                <tr class="Row">
                    <td class="required">Subject:</td>
                    <td><asp:Label ID="lblSubj" Runat="server" /></td>
                </tr>
                <tr>
                    <td class="field" colspan="2" style="text-align:center">                                 
             <input id="btnBack" class="button" type="button" onclick="closeDialog(false);" value="Close" />&nbsp;
             <input type="button" onclick="closeDialog(true);" value="Send Email" />

                    </td>
                </tr>
            </table>
        </fieldset>
    </div> 
        <asp:Button ID="Send" class="button" Runat="server" Text="Send"/>             
</form>        

我实际上得到了错误

SCRIPT5007: Unable to get property 'click' of undefined or null reference

编辑2

根据要求,我也知道使用eval,不是没有,但我在这里维护其他代码。所以让我们假装它没问题

 function GetFormControl(fControlName) {
            var oControl = eval('document.EmailSend.' + fControlName);
            if (oControl == null)
                oControl = GetPageElement(fControlName);
            return oControl;
        }

1 个答案:

答案 0 :(得分:0)

问题是jQuery UI Dialog函数在表单元素之外附加了对话框的HTML。有关解决方案,请参阅以下问题:jQuery UI Dialog with ASP.NET button postback

答案:改变

$("#emailPreview").dialog({
    title: "Preview",
    width: "890px",
    modal: true
});

var diag = $("#emailPreview").dialog({
    title: "Preview",
    width: "890px",
    modal: true
});
diag.parent().appendTo(jQuery("form:first"));