2011-08-15 128 views
3

我有一个也使用jQuery Mobile进行渲染的ASP.NET网站。大多数情况下,这很有效,但是我遇到了一个小问题。该网站进行调查。页面上有几个“提交”按钮。为了防止整个站点重新加载,提交按钮位于UpdatePanels中,以便只重新呈现按钮。jQuery Mobile和ASP.NET更新面板问题

(我还要提一下,我们在另一个页面上有一个Report控件,这与我将要描述的相同的问题)。

当点击提交按钮时,按钮重新呈现,但现在看起来像一个“正常”按钮,因为jQuery Mobile添加的所有CSS现在都丢失了。

所以...我知道问题在于,因为整个页面没有重新加载,jQuery Mobile不会拦截回发并向按钮注入必要的CSS。

我不知道的是如何解决它。

我想我已经足够知道在回发上做一个javascript调用,但我不知道要调用哪个jQuery Mobile例程(我假设有某种document.Ready()调用,但是如果可以的话,找到它)以解决它。

我确实在jQuery Mobile网站上发布了这个问题,但没有得到答复。由于客户正在扼杀我的脖子,我在这一点上感到绝望。

任何帮助,将不胜感激。

回答

3

UpdatePanel本质上意味着你有你的网站上运行的ASP.NET AJAX。
pageLoad (not exactly DOM Ready)在每次部分回发后调用。 使用该事件并在其中写入您的纠正码。

function pageLoad(sender, args){ 
    //Jquery Code 
} 

P.S:UpdatePanels are really dangerous。那件事我已经得到了我的公平分享。
请不要在将来与其他库一起使用它。

希望这有助于,真的。

+0

谢谢纳文。是的,我也不是UpdatePanel的忠实粉丝,但我暂时坚持使用它。就像我说的那样,问题不在于如何调用Javascript,而是我不知道要调用哪个函数。这实际上是一个比UpdatePanel问题更多的jQuery Mobile问题。 –

+0

耶托德我明白了。我正在催促你以另一种方式思考。为什么不在'pageLoad'处重置样式?我很抱歉,我不知道任何其他方式 – naveen

4

我找到了解决方案,并希望在此发布给其他人。我的解决方案稍微有点矫枉过正,但在大多数情况下,这只是“正常工作”。在一天结束时,您需要做的是触发需要更新的元素上的“创建”事件。这就是jQuery Mobile正在寻找的东西,它是什么启动它来重新解析HTML。以下语句将抓取页面上的所有<div>(其中自然包括所有更新面板),并将重新呈现其中的任何控件。我将它添加到后面的ASP.NET代码中的提交按钮的Click()事件中。 (请注意,添加JavaScript到按钮的客户端onclick()似乎不工作)

ScriptManager.RegisterStartupScript(Page, GetType(), "temp", "<script type='text/javascript'>$('div').trigger('create');</script>", false); 

请注意,如果您对内容的更好的处理你想重新解析,然后代替抓取页面上的每一个<div>,您可以针对需要更新的确切<div>,只更新所需的内容。这样可以提供更好的性能,但即使在复杂的页面上,解析也相当麻烦。

+0

惊人的,救了我。虽然有一点小小的改变,但我必须将'GetType'的参数改为'Me.GetType'才能使用vb。 – kevin