从this link分支似乎Request.ServerVariables("SCRIPT_NAME")
没有返回任何内容。我刚刚设置了一个简单的循环来查看是否有任何东西出现但没有运气。有什么想法吗?
For Each s As String In Request.ServerVariables
Label1.Text += s
Next
ServerVariables
以System.Collections.Specialized.NameValueCollection
编辑:使用母版页从页面获取ServerVariables似乎是一个问题。在我的模型背后的代码中,我定义了以下内容:
Public Partial Class Test
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Write(Context.Request.ServerVariables("SCRIPT_NAME"))
End Sub
End Class
这不起作用,非常简单。但是,如果我在.aspx页面中的Page_Load
事件中输入代码,请执行以下操作:
<% Response.Write(Context.Request.ServerVariables("SCRIPT_NAME")) %>
然后它工作正常。关于为什么会发生这种情况的任何想法?
答案 0 :(得分:4)
你确定你没有得到这个吗?
从后面的代码中使用Response.Write(在页面或母版页中)将在页面顶部(通常)输出字符串,在HTML的其余部分之前输出,这可能不是你的位置我期待着看到它。
我在母版页上添加了一个文字控件,之前内容占位符:
On Master: <asp:Literal id="LiteralMaster" runat="server"></asp:Literal>
然后在母版页的Page_Load事件中将其Text属性设置为:
LiteralMaster.Text = Context.Request.ServerVariables("SCRIPT_NAME")
我还在使用此母版页的页面上的内容占位符中添加了一个文字控件:
On page: <asp:Literal id="LiteralPage" runat="server"></asp:Literal>
在页面的Page_Load事件中,我有以下内容:
LiteralPage.Text = Context.Request.ServerVariables("SCRIPT_NAME")
导致:
On Master:/LittleTest/UsingMaster.aspx
在页面上:/LittleTest/UsingMaster.aspx
将我的网页的Page_Load事件修改为:
LiteralPage.Text = Context.Request.ServerVariables("SCRIPT_NAME")
Response.Write("From response.write: " &
Context.Request.ServerVariables("Script_Name"))
在我的浏览器中显示以下显示:
来自response.write:/LittleTest/UsingMaster.aspx
在Master:/LittleTest/UsingMaster.aspx
在页面上:/LittleTest/UsingMaster.aspx
然而,html看起来更像是:
From response.write:/LittleTest/UsingMaster.aspx
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<form name="aspnetForm"
method="post" action="UsingMaster.aspx" id="aspnetForm">
<div>
On Master: /LittleTest/UsingMaster.aspx
<br />
On page: /LittleTest/UsingMaster.aspx
</div>
</form>
</body>
</html>
编辑以回复评论
您正在将NameValueCollection元素的字符串表示形式分配给标签的内容,这只是NAME,而不是NAME和VALUE的组合
尝试以下方法:
For Each s As String In Request.ServerVariables
Label1.Text += s & ": " & Request.ServerVariables(s)
Next
有关详细信息,请查看MSDN文档:
答案 1 :(得分:0)
http://msdn.microsoft.com/en-us/library/ms524602.aspx处的定义表示“正在执行的脚本的虚拟路径,例如”/vdir/default.asp“。这用于自引用URL。”我认为“.asp”部分可能暗示了为什么这不适用于ASP.NET。
我建议不要使用Request.ServerVariables。为Classic ASP或ISAPI创建的任何内容都会让你感到紧张。
答案 2 :(得分:0)
如果您尝试返回脚本名称,请尝试:
Request.CurrentExecutionFilePath
如果您只想要没有路径的脚本名称,可以使用:
Path.GetFileName(Request.CurrentExecutionFilePath)
Path.GetFileName()需要System.IO命名空间
答案 3 :(得分:0)
我尝试了您的代码,并获得了您想要的结果:
<% Response.Write(Context.Request.ServerVariables("SCRIPT_NAME")) %>
返回:/TESTERS/Default.aspx
你可以用它替换它,返回相同的结果:
string path = HttpContext.Current.Request.Url.AbsolutePath;
返回:/TESTERS/Default.aspx