1

我想在 VB.NET 中使用 Response.Write() 重定向到相对 URL。我正在使用以下代码:

编辑:

Response.Write(("account/msgbox.aspx?action=account&status=" & Convert.ToInt16(eAccountStatus).ToString))

Response.Write(("~/account/msgbox.aspx?action=account&status=" & Convert.ToInt16(eAccountStatus).ToString))

Response.Write(("/account/msgbox.aspx?action=account&status=" & Convert.ToInt16(eAccountStatus).ToString))

在我的情况下返回相同的值。

我的应用程序错误事件处理程序报告正在形成的 url 无效。

这是我得到的:

http://localhost:14154/~/http:/localhost:14154/account/msgbox.aspx?action=account&status=6

而不是这个

http:/localhost:14154/account/msgbox.aspx?action=account&status=6

Response.Write() 之前的 Response.Clear() 什么都不做。

在整个项目使用 Response.Write() 之前,我现在不能使用/切换到 Response.Redirect( ) 并且选择使用 Response.Redirect() 将使所有在 Response.Write 调用之后编写的代码都变得无用。

我只需要清除以某种方式附加的基本 url。请让我知道如何实现这一目标。

谢谢。

PS:此代码以前运行良好。一些开发人员进行了更改,现在 Response.Write() 不会导致上述重定向。

编辑

堆栈跟踪:

System.Web.HttpException (0x80004005):文件“/~/account/msgbox.aspx”不存在。在 System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) 在 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) 在 System.Web.Compilation。 BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) 在 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) 在 System .Web.Compilation.BuildManager。

4

2 回答 2

1

好的,我用这个解决了这个问题。虽然我仍然需要了解这是如何工作的。但无论如何,我将它发布给遇到类似问题的任何人。

这是我的新代码。

Response.Write(("../account/msgbox.aspx?action=account&status=" & Convert.ToInt16(eAccountStatus).ToString))
于 2013-03-05T22:00:24.860 回答
1

看起来设置 baseUrl 的代码设置了两次。如果你找不到,你可以把这段代码拼凑到它上面:

Response.Write((baseUrl.replace("http://localhost:14154/~/http:/localhost:14154/", _
    "http://localhost:14154/") & "account/msgbox.aspx?action=account&status=" & _ 
    Convert.ToInt16(eAccountStatus).ToString))

您最好在原点(设置 baseUrl 的位置)修复它。

于 2013-03-05T21:52:20.637 回答