0

使用 javasciprt 函数执行与 Response.Redirect 类似的功能。

function redirectToHome(sessionID) {
        window.location = '<%= ResolveUrl("~/default.aspx") + "?SessionGUID="+ sessionID  %>'}

从代码隐藏传递 sessionID:

string sessionId = system.guid.new().tostring();
btnClose.attributes.add("OnClick","javascript:function(redirectToHome("sessionId" ));");

代码可能不完全相同,但我在上面做的差不多。

但在页面呈现其给出的错误消息“当前上下文 javascript 中不存在 sessionID”请建议另一种方法。

4

1 回答 1

2

在你的redirectToHome功能

window.location = '<%= ResolveUrl("~/default.aspx") + "?SessionGUID="+ sessionID  %>'

整个字符串在 内<% ... %>,因此在传递到服务器之前由 .NET 呈现。因此sessionID将假定有一个 .NET 变量,并且您传递给 javascript 函数的任何内容都不会被使用。(尝试“查看源代码”,看看你的代码真正呈现的样子)

您需要移出sessionID.NET 块:

window.location = '<%= ResolveUrl("~/default.aspx") %>' + '?SessionGUID=' + sessionID;

或者在创建函数时立即从 .NET 块生成会话 ID:

window.location = '<%= ResolveUrl("~/default.aspx") + "?SessionGUID="+ System.Guid.NewGuid().ToString() %>'

如果您决定通过 javascript 变量传递会话 ID,则必须注意一些其他问题:

您的代码当前将打印类似的内容(假设您已修复字符串连接问题):

 onclick="javascript:function(redirectToHome(e4bd5302-a77c-40f4-9439-6b510bb4cdf3))"

这有一系列问题:

  • 您无需指定javascript: in,onClick因为它已经是特定于 javascript 的属性。
  • 您不应该将该代码包装在function( ... )
  • 您没有引用字符串 ID

正确的调用看起来像这样:

btnClose.attributes.add("OnClick","redirectToHome('" + sessionId + "');");

请注意,这同样可以写成:

btnClose.OnClientClick = string.Format("redirectToHome('{0}');", sessionId);

这可能更具可读性。

于 2013-05-30T06:43:59.683 回答