如何使用JQuery.UI Dialog和ASP.Net提交服务器?

时间:2010-01-27 16:17:51

标签: asp.net jquery jquery-ui

我正在寻找一种方法将在JQuery Dialog中捕获的信息提交到ASP.Net中的服务器。我原本以为它可以使用'隐藏'的asp按钮,但点击似乎没有提交表单。这是我到目前为止的代码:

<script type="text/javascript">
  jQuery(document).ready(function() {

    var dlg = jQuery("#dialog").dialog({
            bgiframe: true,
            autoOpen: false,
            height: 150,
            width: 300, 
            modal: true,
            buttons: {
            "Add": function() {
                    var btn = document.getElementById("<%=btnAdd.ClientID %>");
                    if (btn) btn.click();
                    $(this).dialog("close");
                }
            }
        });

        $("#dialog").parent().appendTo("#dialog_target");

  });
</script>

<div id="hidden" style="visibility:hidden" >

    <!-- Hidden button that actually triggers server add -->
<asp:Button ID="btnAdd" 
            runat="server"
            style="display:none"
            OnClick="btnAdd_Click"  />

<!-- Hidden Delete Dialog -->
<div id="dialog" title="New Additional Skill">
        <label>Additional Skill Name:</label>
        <asp:TextBox ID="_txtNewSkillName" runat="server" />
</div>

任何指针?

5 个答案:

答案 0 :(得分:3)

您的隐藏按钮方法很好,但是当您提交时,您的元素可能仍然不在<form>内。

要解决此问题,只需将对话框置于<form>内,以确保其提交...否则您点击的按钮不会在POST设置为服务器,并且事件不会发生。

您可以通过调整.appendTo()电话来完成此操作,如下所示:

$("#dialog").parent().appendTo("form");

由于您只处理1 <form>,这就是您所需要的:)

答案 1 :(得分:0)

在对话框中添加表单,然后在关闭对话框或单击按钮时使用JavaScript提交表单。

答案 2 :(得分:0)

我不确定,但是在FireFox表单元素中装饰了display:none将不会包含在POST数据中给服务器。所以我认为您的表单提交,但ASP.NET不会执行您的服务器端btnAdd_Click函数,因为它无法在POST数据中找到该按钮。

尝试将display:none更改为

visibility:hidden;

position:absolute;
top:-999px;

答案 3 :(得分:0)

使用ClientScript.GetPostBackEventReference而不是设置对btn.click()的调用:

buttons: {
    "Add": function() {
        <%= ClientScript.GetPostBackEventReference(
                new PostBackOptions(this.btnAdd))%>;
    }
}

答案 4 :(得分:0)

试试这个:

__ doPostBack( 'btnAdd',的 'onClick');

这将模拟按钮单击事件,它将回发到服务器。在页面加载事件中,使用它来设置引用:

Page.GetPostBackEventReference(btnAdd)

希望这有帮助。