我正在寻找一种方法将在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>
任何指针?
答案 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)
希望这有帮助。