- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从代码隐藏中显示一个 jQuery UI 对话框,并且需要在回发后刷新它。
该对话框是一个用于过滤和查找数据的控件。因此,用户从 DropDownLists 中进行选择并在 TextBoxes 中输入文本,单击“Apply-Button”,发生异步回发,数据根据用户的选择进行过滤,结果将显示在 GridView 中。因此我需要更新 GridView 周围的 UpdatePanel。
异步回发在以下链接的帮助下工作:
(基本上是dlg.parent().appendTo(jQuery("form:first"));
-解决方案)
问题:我无法使用 UpdateMode="Always"或通过 UpdatePanel.Update() 从代码隐藏手动更新 UpdatePanel。我认为这与对话框不在 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) {
}
});
}
当通过单击 BtnShowDialog(在 jQuery-Dialog 之外)时,它会从代码隐藏中调用
AjaxControlToolkit.ToolkitScriptManager.RegisterStartupScript _
(Me.Page, GetType(Page), "showChargeFilterDialog", "createChargeFilterDialog();$('#Dialog_ChargeFilter').dialog('open');", True)
更新:我还注意到回发值中存在问题。所有文本框(如果为空或未附加逗号)。这表明控件根据以下条件多次渲染:http://www.componentart.com/community/forums/t/60999.aspx
我确信这两个问题是相关的。整个对话框及其所有控件将在每次异步回发中重新创建,因此所有控件名称在 DOM 中多次存在(导致 ViewState 逗号附加问题)。这些控件仅在 FireBug/IE Deveoper 工具栏中可见,而不是在 HTML 源中可见,因此我认为 jQuery 导致了这些问题。我如何处置对话框或如何防止重新创建对话框(检查是否已存在)?这是因为对话框位于 UpdatePanel 内部还是因为它(通过 Javascript)移动到 UpdatePanel 外部?
在异步回发之前销毁对话框并不能解决问题,因为对话框只会消失:
<asp:Button ID="BtnApplyFilter" OnClientClick="$('#Dialog_ChargeFilter').dialog('destroy');" ... />
非常感谢您的帮助。
<小时/>解决方案:我最终使用 ModalPopupExtender来自 AjaxControlToolkit。在出现一些小问题后,它的工作方式就像具有异步回发的魅力(如果您希望弹出窗口保持可见,请不要忘记在每个代码隐藏函数中调用 MPE.Show()
)。如果有人感兴趣,我可以添加更多代码。
最佳答案
I assume that it has something to do with the Dialog not being inside of the UpdatePanel or something similar.
i've also noticed a problem in the postback-values. All TextBoxes if empty or not have a comma appended.
你在这两点上确实是正确的。问题的关键是脚本管理器“认为”它应该更新 jQuery 实际上已移动到页面上不同位置的元素,从而导致该元素的多个副本以及您提到的问题。
我在使用嵌套 UpdatePanel 时遇到过此问题,但在其他情况下也可能会发生。
这个问题的解决方法很困惑。
选项 1 - 更改 jQuery UI 的源代码。我没有找到快速解决办法。除了重写整个插件之外,我找不到在不重新排序 DOM 的情况下让对话框正常工作的简单方法。另外,通过该路线,现在您“拥有”源代码,因为您已经修改了它。
选项 2 - 每当页面部分呈现时调整 DOM 以删除重复元素。您可以输出一些额外的脚本来清理虚假的重复元素。我不喜欢这种方法,因为它允许 DOM 处于无效状态,直到脚本运行。
选项 3 - 手动覆盖 UpdatePanel 的呈现。代码看起来像这样:
private bool _hasDomPresence
{
get
{
return ViewState["__hasDomPresence"] == null ? false : (bool)ViewState["__hasDomPresence"];
}
set
{
ViewState["__hasDomPresence"] = value;
}
}
protected override void OnLoad( EventArgs e )
{
if( !ScriptManager.GetCurrent( this.Page ).IsInAsyncPostBack )
{
// a full postback means we no longer have a DOM presence
_hasDomPresence = false;
}
base.OnLoad( e );
}
protected virtual void ShowDetailDialog()
{
// code to show the offending dialog
// we are showing it, so note the fact that it now has a DOM presence
_hasDomPresence = true;
}
protected override void Render( HtmlTextWriter writer )
{
foreach( Control c in this.Controls )
{
//
// find the offending control's parent container prior to it being rendered
// In my scenario, the parent control is just a server-side DIV
if( c == this.DetailDialog )
{
//
// here, I am checking whether or not the panel actually needs to be
// rendered. If not, I set it to invisible, thus keeping a new DOM
// element from being created.
if( !this.DetailUpdatePanel.IsInPartialRendering && _hasDomPresence )
{
this.DetailUpdatePanel.Visible = false;
}
}
}
base.Render( writer );
}
这也会混淆事件验证,因为页面的客户端和服务器版本不匹配(或者至少 ASP.Net 无法判断它们是匹配的)。我找到的唯一方法是关闭事件验证。
有了适当的安全模型,事件验证并不是 100% 必要的,但我不喜欢被迫将其关闭。
总之,这是我在 SO 上发布的最邪恶的代码,如果你使用它,毛茸茸的白色小猫会死,但该方法似乎确实有效。
希望这有帮助。
关于jQuery 对话框回发但 UpdatePanel 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662263/
我打算使用 vulkan synchronization examples 之一作为如何处理不经常更新的统一缓冲区的引用。具体来说,我正在看这个: vkBeginCommandBuffer(...);
我对 git 的了解有限。 我已经从 master 创建了一个分支 B1,进行了一些编辑并提交到这个分支。 我想从 B1 创建另一个分支 B2,我在 B2 中进行了一些编辑 而且我还想提交 B2(包含
这是我做的 我创建了一个分支 abc。然后我创建了两个文本文件 one.txt 和 two.txt。然后我将它们提交到分支 abc。然后我从分支中删除文件 one.txt 并将这些更改提交到分支。 现
在我的主分支中,我得到了 2 个文件: file1.txt file2.txt 我从那里创建了名为 b1 的新分支。在b1中,我修改了file2.txt,不小心删除了file1.txt(从磁盘中,当我
我是 git 的新手。 我创建了一个分支,进行了更改,现在我想 merge 回 master 以使它们“永久化”。 所以我执行了 git merge 1.2 报告为已经是最新的,在 master 上执
我在一个新团队中,工作方式与我以前习惯的完全不同,我们在功能分支上工作,测试人员会在该功能分支上进行测试,然后我们会运行一个 jenkins 作业在该功能被测试签署时将该功能 merge 到开发中,根
我目前正在学习动态内存管理是如何工作的,更具体地说是 realloc 以及它是如何在函数中完成的。 在下面的程序中,我只是想尝试使用 malloc 在函数 a() 中分配一些数字,然后将它们传递给另一
在 Java 中如何从另一个线程分派(dispatch)回主 UI 线程?我正在使用带有 Runnable 的执行器在主 UI 线程之外做一些工作,并且我有一个接口(interface),以便可以通过
我在 git 中有一个项目,所有的事情都直接在 master 分支上完成,标签被用来标记代码的发布版本。我知道这并不理想,并且一直在查看 git 流程,例如:http://nvie.com/posts
我们有一个相当大的 GIT 存储库,我想删除从未 merge 回 master 的分支。 反过来也很好 - 一种列出在某个时候已 merge 到 master 中的所有分支的方法。 我希望首先获取一个
在 Swift 和 C 之间传递字符串时,我看到一些我不理解的行为。请考虑以下 Swift 函数: func demo() { print("\n\n\n\n")
我以前从未合作过,现在我发现自己需要与其他一些人分享这个项目,即使我将完成 90% 的开发工作。 我在 github 上有一个私有(private)仓库。我用 推送了我的初始源 git push or
我们的项目使用 Gitlab,我们有两个长期存在的分支:dev 和 master,类似于 Git Flow。我们正在使用“merge 提交”方法,它将在主分支中创建一个 merge 提交。 但是,由于
我对自定义 View 的绑定(bind)属性有疑问。该属性绑定(bind)到核心数据实体的 NSArrayController。 问题是这样的: 在我看来,我画了几个矩形。这些矩形的位置保存在核心数据
这对我来说似乎太棘手,无法正确执行此操作。 我有一个TreeMap ,我正在获取其中的子图: public static reqObj assignObj(reqObj vArg, i
我有以下 XAML: 所以,基本上我希望将其中一
我正在使用 Angular js 1.3.4 版本并使用 ui-select。 我正在将复杂的多级 JSON 对象数组绑定(bind)到此 ui-select,它工作正常。因此用户可以在此选择中选择任
我正在使用 WebAPI 构建 API,并且一直在使用 NLog 在整个堆栈中进行日志记录。我的 API 解决方案有两个主要项目,包括: 实现 Controller 和 webapi 东西的网站层本身
在 Git 中,给定 (1) 一个分支 A 和 (2) 一个在过去某个时间从 A 派生的分支 B,然后 merge 回 A,我如何才能找到现在 A 中起源于 B 的所有提交? 目的是确定现在在 A 中
假设我的 Controller 如下所示: public class myController { private MyCustomItem acte; ... // gett
我是一名优秀的程序员,十分优秀!