它与jQuery有何关系?我知道该库在内部使用本机javascript函数,但是只要出现这样的问题,它究竟在尝试做什么?
我刚刚决定使用Firebug,当创建Fancybox窗口时,它实际上需要我的所有ASP.NET控件(包含在DIV标记中)并将它们放在FORM标记之外.所以我猜这就是为什么然后ASP.NET按钮不做任何事情 - 它被放置在窗体之外.
那么,除了使用完全不同的模态对话框之外,你有什么建议我可以阻止这个(或使ASP.NET按钮工作)吗?
编辑:好的,人们报告某些建议的修复程序在某些版本上适用于他们.所以,请务必阅读所有答案/滚动到底部,了解如何在不同的Fancybox版本上解决此问题.
我正在使用jquery UI对话框来修改ASP.NET网站中的数据行.打开对话框时,我将对话框附加到底层表单,这使我可以使用回发. $('#' + id).parent().appendTo($("form"));
但是当我设置对话框属性时,modal: true不仅背景灰显,对话框也是灰色且无法访问.
如果我删除$('#' + id).parent().appendTo($("form"));它的工作原理应该但然后我不能使用回发.
我做错了什么,或者我是否错过了让它发挥作用的一点?
Javascript在.aspx之上
<script type="text/javascript">
$(document).ready(function () {
$('#workDialog').dialog({
autoOpen: false,
draggable: true,
resizable: false,
width: 800,
height: "auto",
modal: true
});
});
function showDialog(id) {
$('#' + id).parent().appendTo($("form"));
$('#' + id).dialog("open");
}
function closeModalDiv(id) {
$('#' + id).dialog("close");
}
</script>
Run Code Online (Sandbox Code Playgroud)
包含对话框的div
<div id="workDialog" title="Basic dialog">
<asp:UpdatePanel ID="upWorkDialog" runat="server" UpdateMode="Conditional"> <ContentTemplate>
<table id="Table1" class="item">
<tr>
...
</tr>
<tr>
<td><asp:TextBox ID="txt...></asp:TextBox></td>
<td><asp:TextBox ID="txt...></asp:TextBox></td>
<td><asp:TextBox ID="txt...></asp:TextBox></td>
<td><asp:TextBox ID="txt...></asp:TextBox></td>
</tr> …Run Code Online (Sandbox Code Playgroud) 我的对话框中的输入字段没有发布,我不知道为什么......
我已经在mac firefox和safari上测试了它,并且Windows IE和firefox具有相同的结果,所以我不认为它是浏览器,如果我禁用对话框,字段会发布.
我已经重新阅读了jquery ui docs并找不到我做错了什么......对话框似乎不太可能不支持输入.
这是我正在使用的代码的精简版本:
<script type="text/javascript">
$(document).ready(function(){
$("#dialog").dialog({
autoOpen: false,
buttons: {
"OK": function() {
$(this).dialog('close');
}
}
});
$("#publishSettings").click(function(){
$("#dialog").dialog('open');
});
});
</script>
<form method="POST" action="publish.php">
<input type="button" id="publishSettings" value="Publish Settings">
<div id="dialog">
Publish Date
<input type="text" name="publishOn"><br>
Unpublish Date
<input type="text" name="unPublishOn">
</div>
<input type="submit" name="pubArticle" value="Publish">
</form>
Run Code Online (Sandbox Code Playgroud)
没什么不寻常的吧?为什么这不适合我!?
谢谢!
我试图点击弹出如下所示,但它不起作用.请帮忙
public void btnSubmit_Click(Object o, EventArgs e)
{
if (checkFileExists(Convert.ToString(fileInfo)))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Msg", "<script type=\"text/javascript\" language=\"javascript\">function showMsg(){return confirm(\"This image name already exists, do you want to replace it?\");}</script>", true);
btnSubmit.OnClientClick = "return showMsg()";
}
if (something else)
{
// It does whatever is here but never pops the question above
}
}
Run Code Online (Sandbox Code Playgroud)
在我的按钮上
<asp:Button class="Button" ID="btnSubmit" CausesValidation="True" Text="SUBMIT" runat="server"
OnClick="btnSubmit_Click"></asp:Button>
Run Code Online (Sandbox Code Playgroud) 编辑:
有些人建议直接在表单上提交提交.这不是我想要实现的目标.具体来说,我希望能够在输入类型='submit'上调用click()事件,并让它像通常那样提交表单.jQuery UI对话似乎干扰了这种正常行为.请查看我创建的jsFiddle链接,因为问题可以在那里重新创建.
(首先我已经在StackOverflow上看到了这个问题,但答案在我的情况下不起作用: 带有ASP.NET按钮回发的jQuery UI对话框)
期望的行为:
在我的页面上,我有一个隐藏字段和一个提交按钮(通过CSS隐藏).
我想要做的是使用JavaScript以编程方式单击此按钮,从而导致提交表单.最重要的是....我想从jQuery UI对话框中触发所有这些.基本上,用户将在jQuery UI对话框中进行选择,这将导致整个页面被提交和重新加载.
问题陈述
触发这样的按钮点击通常可以正常提交表单.但是,当从jQuery UI对话框中触发操作时,它会失败.
正如你在我的jsFiddle代码中看到的,我在提交按钮上调用了jQuery的click()函数....但是表单实际上并没有提交!该按钮确实被JavaScript点击,但"表单提交行为"本身并未发生.该页面未发布.
我相信jQuery UI对话框会以某种方式干扰我尝试以编程方式单击的按钮的表单提交行为.
我想以编程方式触发按钮单击的原因:
我不能让对话框内的按钮自己提交按钮.在我的例子中,我创建了一个可重用的JavaScript控件,它包含了一个jQuery UI对话框.这个JS控件允许用户选择一个员工.但是,当员工被选中时,所需的行为并不总是如下:表单提交.(有时我可能想在页面上显示已挑选的员工,但尚未执行提交.)
额外细节:
这个问题并不是特定于ASP.NET,但是这里有一些额外的细节可以帮助解释我为什么要尝试这一切.我正在使用.NET 4.5编写ASP.NET Web Forms应用程序.我已经开始越来越多地为我的页面使用JavaScript了,但是在这个特定的页面上我想触发一个实际的回发到服务器,这样我就可以处理ASP.NET页面生命周期中的按钮点击事件并填充一个GridView.这就是为什么我希望能够使用JavaScript来点击一个asp:按钮,这反过来会导致表单提交.
最重要的是......自己尝试--->请参阅下面的jsFiddle链接.....
同样,这个问题并不是特定于ASP.NET的.我已经能够使用常规HTML和jQuery UI在JsFiddle上重新创建相同的问题.这是JsFiddle链接:
正如您在代码中看到的,我已经尝试使用通过jQuery DOM操作在表单内移动jQuery UI Dialog的"修复".这似乎无法解决问题.
谢谢!我感谢任何帮助!
HTML
<html>
<head></head>
<body>
<form action="http://www.google.com/index.html" method="post">
<input type="button" value="Open jQuery dialog" id="btnOpenDialog" />
<br /><br /><br />
The button below submits the form correctly if you click it.<br />
However, when I try to trigger click() event on this …Run Code Online (Sandbox Code Playgroud) 我想从Codebehind显示一个jQuery UI对话框,需要在回发后刷新它.
该对话框是一个用于过滤和查找数据的控件.因此,用户从DropDownLists中选择并在TextBoxes中输入文本,单击"Apply-Button",发生异步回发,根据用户的选择过滤数据,结果将显示在GridView中.因此,我需要更新GridView周围的UpdatePanel.
异步回发在这些链接的帮助下工作:
(基本上是dlg.parent().appendTo(jQuery("form:first"));-Solution)
问题:我无法使用UpdateMode ="Always"更新UpdatePanel,也无法通过UpdatePanel.Update()从代码隐藏手动更新UpdatePanel.我认为它与Dialog不在UpdatePanel内部或类似的东西有关.希望有人可以帮助我.
一些来源:
function createChargeFilterDialog() {
//setup dialog
$('#Dialog_ChargeFilter').dialog({
modal: true,
resizable: false,
autoOpen: false,
draggable: true,
hide: "Drop",
width: 850,
height: 600,
position: "center",
title: "Charge-Filter",
buttons: {
"Close": function () {
$(this).dialog("close");
}
},
open: function (type, data) {
$(this).parent().appendTo(jQuery("form:first"))
},
close: function (type, data) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
当点击通过BtnShowDialog(在jQuery-Dialog之外)时,它会从代码隐藏中调用
AjaxControlToolkit.ToolkitScriptManager.RegisterStartupScript _
(Me.Page, GetType(Page), "showChargeFilterDialog", "createChargeFilterDialog();$('#Dialog_ChargeFilter').dialog('open');", True)
Run Code Online (Sandbox Code Playgroud)
更新:我也注意到postback-values中存在问题.所有TextBoxes如果为空或没有附加逗号.这表示根据以下内容多次呈现控件:http://www.componentart.com/community/forums/t/60999.aspx
我确信这两个问题都是相关的.将在每个异步回发中重新创建包含其所有控件的整个对话框,因此所有控件名称在DOM中存在多次(导致ViewState逗号附加问题).控件只能在FireBug/IE开发工具栏中看到,而不能在HTML-Source中看到,因此我假设jQuery会导致这些问题.如何处理对话框或如何防止对话框 …
如何在jQuery UI对话框中回发ASP.NET提交按钮?
实际上我正在使用UI对话框模式,就像我们使用Ajax控件工具包的模式一样,来更新存储在gridview控件中的数据值.我能够做所有事情,但我无法使用UI模式触发回发.我对jQuery及其UI有点新,所以找不到一个好的解决方案.
对于Ajax工具包的模态,我们习惯设置一个触发器属性,以便在有人点击其提交按钮时启用回发,但这里就不可能了.以下是我的代码:
//------------Modal first----------------
<div id="editEventModal" title="Edit Event Details" style="display:none">
//-------Here are my controls with asp.net validators
<asp:Button ID="btnEditEvent" runat="server" Text="Save" ValidationGroup="EditEvent" />
</div>
//--------- JavaScript/jQuery method for calling popup
function invokeEditPopup(){
$("#editEventModal").dialog({
width: 700,
modal: true
});
}
//-- Please not that I have not used UI_Dialog's predefined `OK`, `Cancel` buttons as I need to validate my form with asp.net validators on submit button's `click` event.
Run Code Online (Sandbox Code Playgroud)
在gridview中,我在事件中添加了javascript事件invokeEditPopup()到按钮(用于弹出对话框)GridView_DataBound.
如何使btnEditEvent对话框进行回发,以便在服务器上执行所需的过程.
-----------------------有关更多信息------------------我尝试使用jQuery中的想法 …
我有一个显示为模态对话框的div.
<div id="div2" style="display: none;" title="Upload Prenda">
<center>
<br />
Select File to Upload:
<asp:FileUpload ID="PrendaFileUpload" runat="server" Width="345px" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="PrendaFileUpload"
ErrorMessage="File to be uploaded Required" ValidationGroup="X">*</asp:RequiredFieldValidator><br />
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True"
ShowSummary="False" ValidationGroup="X" />
<br />
<asp:Button ID="uploadButton" runat="server" Text="Upload" OnClick="uploadButton_Click"
Width="100px" />
</center>
</div>
Run Code Online (Sandbox Code Playgroud)
这是它的jquery
<script type="text/javascript">
$(function() {
$( "#div2" ).dialog({
autoOpen: false,
modal:true,
resizable: false,
height: 200,
width: 600
});
$( "#toggle" ).click(function() {
$( "#div2" ).dialog( …Run Code Online (Sandbox Code Playgroud) 我正在使用BlockUI来显示模态.在阻止的模式中,我有一个更新面板.在更新面板中,我有一个文本框和一个按钮,可以将内容提交回服务器.到目前为止一切正常(调用blockUI,出现模态,按钮执行回发).但是,当按钮的click事件被触发时,即使输入了文本,文本框的值也始终为空.更新面板更新时,文本框显示为空白.看来这可能是某种viewstate问题,我没有关闭viewstate.
<a href="javascript:$.blockUI({ message: $('#divTest') });">SHOW MODAL</a>
<div id="divTest" style="display: none;">
<asp:UpdatePanel ID="upTest" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:TextBox ID="txtTestVS" runat="server" /><br />
<asp:Button ID="cmdTest" Text="TEST" OnClick="cmdTest_Click" UseSubmitBehavior="false" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
服务器端:
protected void cmdTest_Click(object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)
{string x = txtTestVS.Text; }
字符串"x"始终等于"".
我在div中有一个按钮,默认情况下是隐藏的,因为它被jQuery UI用作模态弹出窗口.
永远不会调用此按钮的单击事件处理程序,但如果我将按钮代码复制到此隐藏div之外,则它可以正常工作.我该如何解决这个问题?
这是我到目前为止的代码:
<div id="dialog" title="Notify Users">
<div style="width:100%; height:500px; overflow:auto;">
<asp:Repeater runat="server" ID="rptNotify">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:CheckBox ID="chkUser" runat="server" Checked='<%# Eval("Checked") %>' />
</td>
<td>
<asp:Label ID="lblUser" runat="server" Text='<%# Eval("FullName") %>'/>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
<asp:Button ID="btnSaveNotifications" runat="server" Text="Save" OnClick="btnSaveNotifications_Click" />
</div>
Run Code Online (Sandbox Code Playgroud)
显示/隐藏此div的代码是:
<script>
// Increase the default animation speed to exaggerate the effect
$.fx.speeds._default = 1000;
$(function () {
$("#dialog").dialog({
autoOpen: false,
show: "blind",
hide: "explode"
});
$("#opener").click(function () { …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
<div id="AddFriendDiv" style="display: none">
<asp:TextBox ID="FriendParamtxt" runat="server"></asp:TextBox>
<asp:UpdatePanel ID="upd" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="SearchFriend_btn" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Button ID="SearchFriend_btn" runat="server" OnClick="SearchFriend_btn_Click" Value="Search" />
<asp:Repeater ID="FriendRequestRepeater" runat="server">
<ItemTemplate>
<table border="1">
<tr>
<td>
<img src='<%#Eval("PROFILE_PIC") %>' width="35px" height="35px" alt='<%#Eval("NAME") %>' />
</td>
<td>
<asp:Label ID="Name_lbl" runat="server" Text='<%#Eval("NAME") %>'></asp:Label>
</td>
<td>
<input type="hidden" id="requestFriendID_hf" /><input type="button" id="addFreind"
value="Send Request" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
</div>
Run Code Online (Sandbox Code Playgroud)
客户端 :
function SendFriendRequest() {
var dialogOption = { title: "<u>Add Friend</u>", width: 280, …Run Code Online (Sandbox Code Playgroud) jquery ×9
asp.net ×8
c# ×4
javascript ×4
jquery-ui ×4
.net ×2
html ×2
updatepanel ×2
asp.net-ajax ×1
blockui ×1
domexception ×1
fancybox ×1
form-submit ×1
forms ×1
post ×1
viewstate ×1