我正在使用UpdatePanel异步调用页面中的按钮单击事件,该页面调用另一个类中的方法,该类在输出中写出XML文件.有没有办法用JQuery而不是UpdatePanel来做到这一点?
我非常喜欢jQuery UI的外观,我喜欢将它集成到我的ASP.NET Web应用程序中.我喜欢这些主题以及使用小部件是多么容易.我目前正在使用AJAX Control Toolkit控件,如Calendar和ModalPopup.我希望与以取代他们的DatePicker和对话窗口小部件,但我听说他们 有 问题与UpdatePanel的.有这些问题的解决方法,但我想知道,它值得吗?
这引出了我的问题:
更新: 根据目前为止的答案,似乎最好的办法是用$ .ajax和PageMethods替换UpdatePanels.这应该允许我使用jQuery UI而没有任何问题,并且还提高了我的AJAX性能.
我想在更新面板中为文本区域使用富文本编辑器.
我发现这篇帖子:http://www.queness.com/post/212/10-jquery-and-non-jquery-javascript-rich-text-editors通过这个问题:需要ASP.Net/MVC富文本编辑器
决定使用TinyMCE,因为我之前在非AJAX情况下使用它,并且它在该列表中说它与AJAX兼容.好吧,我做了很好的' tinyMCE.init({ //settings here });
测试它,它在更新面板更新后消失了.我从这里的一个问题中找出它应该在page_load函数中,所以它甚至可以在异步回发上运行.好吧,这样做,面板停留.但是,在尝试从我的textarea提交值时,它的文本总是返回为空,因为我的表单验证器总是说"你必须输入描述",即使我在其中输入文本.这是在页面第一次加载以及对页面执行异步回发之后发生的.
好吧,我发现这个http://www.dallasjclark.com/using-tinymce-with-ajax/并且不能从同一个AJAX TinyMCE textarea发布两次.我尝试在tinyMCE.init之后立即将此代码添加到我的页面加载函数中.这样做会破坏我之后在page_load中调用的所有jquery,它仍然存在同样的问题.
我仍然是客户端脚本编写的初学者,所以也许我需要将代码放在与page_load不同的位置?不确定我链接的帖子不知道放置代码的位置.
我的Javascript:
<script type="text/javascript">
var redirectUrl = '<%= redirectUrl %>';
function pageLoad() {
tinyMCE.init({
mode: "exact",
elements: "ctl00_mainContent_tbDescription",
theme: "advanced",
plugins: "table,advhr,advimage,iespell,insertdatetime,preview,searchreplace,print,contextmenu,paste,fullscreen",
theme_advanced_buttons1_add_before: "preview,separator",
theme_advanced_buttons1: "bold,italic,underline,separator,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,undo,redo,link,unlink,separator,styleselect,formatselect",
theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,separator,removeformat,cleanup,charmap,search,replace,separator,iespell,code,fullscreen",
theme_advanced_buttons2_add_before: "",
theme_advanced_buttons3: "",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
extended_valid_elements: "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
paste_auto_cleanup_on_paste: true,
paste_convert_headers_to_strong: true,
button_tile_map: true
});
tinyMCE.triggerSave(false, true);
tiny_mce_editor = tinyMCE.get('ctl00_mainContent_tbDescription');
var newData = tiny_mce_editor.getContent();
tinyMCE.execCommand('mceRemoveControl', false, 'your_textarea_name'); …Run Code Online (Sandbox Code Playgroud) 我有一个用户控件,带有链接按钮(用于分页)和更新面板内的转发器.分页工作正常,但每次点击进入下一页时都会导致整页回发.
更新面板如下所示:
<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Repeater ID="rptOrganizations" runat="server">
<HeaderTemplate>
<table>
<thead>
<tr>
<th>Organization</th>
<th>State</th>
<th>Accredited Since</th>
</tr>
</thead>
</table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Literal ID="ltlInstitution" runat="server" />
</td>
<td>
<asp:Literal ID="ltlState" runat="server" />
</td>
<td>
<asp:Literal ID="ltlAccreditedDate" runat="server" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<uc2:RepeaterPaging ID="rpPager" runat="server" PageSize="10" OnNextButtonClickEvent="btnNext_Click" OnPreviousButtonClickEvent="btnPrev_Click" />
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
并且用户控件的内容如下所示:
<asp:LinkButton ID="btnPrev" runat="server" OnClick="btnPrev_Click">Previous</asp:LinkButton> |
<asp:LinkButton ID="btnNext" runat="server" OnClick="btnNext_Click">Next</asp:LinkButton>
<asp:Literal ID="ltlNumResults" runat="server" /> results returned.
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试为用户控件添加异步回发触发器,这会导致异步回发,但不会更新更新面板中的其余文本.换句话说,发生异步回发并显示下一页,但转发器中的原始文本也位于其下方.
我还确认我的链接按钮上设置了IDS,因为这可以在更新面板中触发完整的回发.
我尝试更改更新面板模式(Always,Conditional,ChildrenAsTriggers等).
这些都没有区别 - 实际上导致异步回发的唯一方法是使用触发器,但更新面板中的其余内容不会更新,因此我得到重复的内容.有任何想法吗?
有一个jQuery等效于执行以下操作:
$(document).ready(function() {
Run Code Online (Sandbox Code Playgroud)
对于一个元素:
$(a).ready(function() {
Run Code Online (Sandbox Code Playgroud)
我在updatepanel中有内容,我在一些锚元素上调用jQuery UI的.button().更新updatepanel后,锚点将被重新呈现并丢失UI样式.
我已经知道如何使用.NET AJAX的add_endrequest(处理程序)检测ajax请求的结束,但是希望使用jQuery.delegate来获得更简洁的解决方案.
例如
$('body').delegate('#mybutton', 'load', (function(){ //this doesnt work... }
Run Code Online (Sandbox Code Playgroud) 我试图使用jquery验证插件,但我的表单在更新面板中.因此,即使在提交表单上应用验证后,它也会验证并显示所需的消息几乎不到2秒,然后提交表单.
这是什么解决方法?
我也试过这个.
<asp:UpdatePanel ID="AddUserPanel" runat="server"
ChildrenAsTriggers="false"
UpdateMode="Conditional">
Run Code Online (Sandbox Code Playgroud)
但这似乎也没有帮助.
我的印象是,嵌套UpdatePanel中的控件将导致顶层UpdatePanel刷新(从而刷新两个UpdatePanel),因为该控件上的任何事件都充当"隐式"触发器.那是对的吗?
我一直试图连接这样的东西 -
UserControl
Parent UpdatePanel
"Show" button
ASP:Panel
Dynamically added UserControls, each with UpdatePanels
Run Code Online (Sandbox Code Playgroud)
单击"显示"按钮时,ASP:Panel变为可见,并根据某些后端逻辑动态开始将UserControls动态添加到自身.
每个动态添加的控件(以下称为UserControls)都有自己的Atlas启用按钮和链接,因此它们也有UpdatePanels.目前,当我单击其中一个UserControls中的链接时,ASP:Panel的所有内容都会消失,就好像它正在重新渲染一样.我的所有动态添加的控件都会消失,并且调试器中没有捕获任何单击事件.
我假设这里发生的事情是驻留在嵌套更新面板中的控件导致父UpdatePanel回发,因为它们触发了"隐式"触发器.有没有办法让我的UserControls自动运行而不是弄乱ASP:包含它们的面板?
如果没有,我应该采取什么策略?如果我必须在其中一个(可能很多)UserControls上发生事件时重新呈现整个ASP:Panel,这意味着我将不得不重新创建UserControls,这需要花费一些精力来创建.我还必须保留某种视图状态来重新创建它们.我对ASP.NET有些新意,这听起来令人生畏.我宁愿永远不要刷新顶级的UserControl和ASP:Panel,如果我可以避免它,并让每个动态添加的UserControls以异步方式触发和处理自己的事件.
编辑:我没有动态添加控件,而是将它们添加到标记中(不是一个糟糕的解决方案).因此摆脱了控件消失的问题,因为现在控件不是动态添加的,而是存在于标记中.但是,仍然会显示父UpdatePanel帖子,因为所有UserControl都会被发布而不是一个.如何只进行一次UserControl回发?另外,我想知道如果动态添加如何摆脱控件消失的问题?
我在更新面板中更新时使用以下代码显示消息
string jv = "alert('Time OutAlert');";
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "msg", jv, true);
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但是当我在它之后使用Redirect时它会加载页面而不显示消息.我希望用户看到该消息,点击"确定"后,它应该重定向.
string jv = "alert('Time OutAlert');";
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "msg", jv, true);
Response.Redirect("~/Nextpage.aspx");
Run Code Online (Sandbox Code Playgroud) 我正在尝试为ASP.Net超链接设置背景动画,以便在更新面板刷新时执行黄色淡入淡出.到目前为止,它几乎在所有时间都有效,但偶尔会出现javascript错误"无效的Propery值".并调试到此行的jquery颜色插件代码...
fx.elem.style[attr] = "rgb(" + [
Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0),
Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0),
Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)
].join(",") + ")";Run Code Online (Sandbox Code Playgroud)
以下是目前正在发生的事件顺序......
首先,窗口加载doc.ready它会在更新面板完成刷新时注册要执行的事件......
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(yellowFade);
Run Code Online (Sandbox Code Playgroud)
其中yellowFade被定义为......
function yellowFade() {
window.setTimeout("$('#' + hyperlinkUrlId).animate( { backgroundColor: 'white' }, 2000)", 2000);
window.clearTimeout();
}
Run Code Online (Sandbox Code Playgroud)
现在,我很少在此时崩溃,但通常是晚些时候,所以我会继续......
然后我单击一个标题为"生成"的按钮创建一个URL,加载ASP.Net超链接,其中包含它创建的URL的文本,然后通过javascript将其背景颜色设置为黄色,以便从此处淡出...
$("#" + hyperlinkUrlId).css("background-color", "#FBFF9C");Run Code Online (Sandbox Code Playgroud)
我最初通过此代码设置后面代码中的颜色...
Url.BackColor = ColorTranslator.FromHtml("#FBFF9C");Run Code Online (Sandbox Code Playgroud)
但后来我想也许后面的颜色被设置为jquery颜色插件无法识别的东西,或者因为它是设置服务器端插件无法访问它的样式或其他东西,但更改它仍然没有修复bug的效果.
最后,生成将URL的背面颜色从白色更改为黄色然后正如我所说的那样,它大部分时间都会消失,但很少会抛出错误"无效的属性值".
据我所知,我的语法就是使用彩色动画的方式.我觉得我使用更新面板的事实可能会在这里造成严重破坏,但我不确定.
有没有人对什么可能导致这样的事情有任何见解?这是一个真正的混乱尝试调试,因为它很少发生无视javascript已经很难调试的事实.
在Windows Vista上使用jquery 1.3.1和jquery.color 1.0.使用Visual Studio 2008.如果有什么我可以清理的,请告诉我.
编辑: Dang,还没有一个回应.我已经花了一些时间来处理这个问题,但我刚刚在我的应用程序的另一部分找到了我正在进行黄色淡入淡出的错误.这两个页面都使用更新面板.在许多情况下,我不是更新面板的粉丝,它肯定会对我的jquery造成严重破坏.我想知道它是否与此有关.哦,这有点暗示整个Vista的事情,但我会指出我在IIS7上运行.
这会引起任何见解吗?
我知道这个问题可能过于通用,但为了缩小问题,这里有一个简短的描述:
我打算忘记ASP.net UpdatePanel并通过JQuery使用ajax.我担心由于JavaScript的简单客户端性质(以及JQuery代码),任何看我的网页源代码的人都可以意识到我正在调用的Web服务的URL是什么以及传递的是什么那些网络服务.
当UpdatePanel用于这些类型的操作时,我确信调用Web服务是在服务器端完成的,我不关心调用敏感Web服务公开公开的信息问题,但现在我计划通过Ajax JQuery,它让我很担心.
我的担忧是否合理,如果是真的,那么避免网络服务呼叫信息威胁的最佳解决方案是什么?
澄清:在谈到UpdatePanel时,我的意思是利用一系列技术,包括ASP.net AJAX,代码隐藏和依赖服务器端Dll来执行异步服务器端操作而不是jquery Ajax,这需要Web服务来与服务器进行交互.
updatepanel ×10
asp.net ×8
jquery ×5
asp.net-ajax ×3
javascript ×3
ajax ×2
jquery-ui ×2
.net ×1
.net-2.0 ×1
c# ×1
colors ×1
nested ×1
postback ×1
security ×1
tinymce ×1
web-services ×1