【发布时间】:2012-03-09 03:51:55
【问题描述】:
在我页面的 PreRender 事件中,我决定执行response.redirect()。
这意味着该页面上 <script language="JavaScript" type="text/javascript"> 标记中包含的任何 javascript 都不会被执行。
我希望做到以下几点:
String allJavaScript = MagicFunctionThatReturnsAllJSInTheControl(someUserControl)
ClientScript.RegisterClientScriptBlock("".GetType(), "s", allJavaScript );
Response.Redirect("~/newpage.aspx",false);
你知道如何编写一个代码,在 C#/vb.net 中MagicFunctionThatReturnsAllJSInTheControl(someUserControl)
谢谢
【问题讨论】:
-
RegisterClientScriptBlock()只渲染当前页面中的<script>元素,不再渲染。所以即使你希望的事情是可能的,你仍然必须以某种方式将allJavascript传递给newpage.aspx以使该页面执行它。由于您正在重定向,因此您必须使用查询字符串或用户的会话。结果可能不会很漂亮。 -
并非如此,ClientScript.RegisterClientScriptBlock 会在浏览器重定向到 newpage.aspx 之前在 currentpage.aspx 上执行它
-
嗯,不。 RegisterClientScriptBlock() 将安排一个
<script>元素在当前页面中呈现,然后Response.Redirect()将继续忘记整个页面并向客户端发送一个302标头。也许你在考虑Server.Transfer()? -
@trainer 脚本在响应结束时运行,因此如果您正在执行
response.redirect,则不会处理当前响应的脚本... -
@Frédéric Hamidi => 一旦控件从函数中移出,甚至在页面生命周期之后,并且在没有像其他用户提到的那样移动到另一个页面的情况下,您提到的脚本代码应该执行
response.redirect。如果在同一个函数中移动到其他页面,在即将过期的页面上渲染脚本标签是否有意义...?
标签: javascript asp.net extract code-behind