2010-06-13 108 views
2

在一个简单的aspx页面,我可以有一个自定义为http://www.xefteri.com/articles/show.cfm?id=18简单的页面描述 JavaScript函数回发使用一个LinkBut​​ton:ASP.NET如何使用__doPostBack从自定义JavaScript与主/内容页

<asp:LinkButton id="CreateFile" runat="server" onclick="CreateFile_Click" /> 

与背后的代码有VB子程序:

Sub CreateFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 

,并且做了一个JavaScript自定义函数:

__doPostBack('CreateFile',''); 

当我将代码移至具有相应主页的内容页面时, 简单示例不再有效。

我知道,当涉及到主页面 时,在生成的HTML中更改了服务器控件ID,并且我在Javascript中使用了正确的ID。 作为示例,对于LinkBut​​ton ID,我使用'<%= CreateFile.ClientID%>'为 生成的HTML中的Javascript。从来没有这么少,我仍然不能想到 了解如何在涉及主页面时从Javascript获取回传。 更准确地说,在混合母版页的代码甚至不会编译 但结果:

'CreateFile_Click' is not a member of 'ASP.testmaster_aspx' 

如果我从LinkBut​​ton的标记它编译 但不工作,请删除onclick =“CreateFile_Click”。相似,如果onclick从没有母版页的简单版本 中删除,它也不能正常工作。

当使用母版页时,如何从自定义Javascript函数获取回传的任何输入将不胜感激。

回答

1

你是否硬编码__doPostBack的调用?

尝试使用Page.GetPostBackEventReference

获得您的JavaScript有效的句柄。

一旦你写出了一个有效的回发事件引用,你可以将它包装在一个本地函数中,你可以从母版页调用它。

if (window.myPostBackfunction) // check if it exists 
    myPostBackFunction(); 
+0

我不想硬编码对__doPostBack的调用,并且您指向GetPostBackEventReference的指针是正确的。谢谢! – harrije 2010-06-14 01:13:37

1

这样做。

在主页面中保留调用__dopostback函数的JavaScript。在每一个需要调用回调函数的页面上,在事件发生后自动刷新一个按钮,并使用“style = display:none”隐藏它(在本例中,我将该按钮命名为'btndp'),并在单击该asp按钮的事件,在__dopostback中写入要运行的代码。现在的JavaScript需要的元素的ID,而ASP需要的元素的名称,以便在你的JavaScript在母版页为此

var btnName = $get("content_btndp").name; 
__doPostBack(btnName, ""); 

这里你可以看到我们第一次使用该ID的元素的名称,然后通过名称__dopostback函数。因此,在每个内容页面上,您可以放置​​一个具有相同名称的不可见按钮,并且您的母版页上的一个脚本将全部提供。

我希望这可以解决您的问题。

相关问题