如果存在,如何打开文件,否则重定向到页面

时间:2011-04-06 20:18:35

标签: c# asp.net visual-studio

iam试图告诉页面打开某个aspx,如果它存在,否则它应该重定向到另一个页面这里代码iam使用:

   protected void Page_Load(object sender, EventArgs e)
{
    string str = "~/User" + "/" + Page.User.Identity.Name + "/" + Page.User.Identity.Name + ".aspx";
    FileInfo fi = new FileInfo(str);
    if (fi.Exists) {
        Response.Redirect(str);
    }
    else {
    Response.Redirect("Page.aspx");
        }
}

但即使原始页面存在,我也会一直重定向到page.aspx

感谢

4 个答案:

答案 0 :(得分:3)

您需要将完整路径传递给FileInfo。使用Server.MapPath从虚拟路径映射到完整路径,如下所示:

string str = "~/User" + "/" + Page.User.Identity.Name + "/" + Page.User.Identity.Name + ".aspx";
string path = Server.MapPath(str);
if (File.Exists(path)) 
{
    Response.Redirect(str);
}
else
{
    Response.Redirect("Page.aspx");
}

答案 1 :(得分:2)

我猜这是因为你正在使用〜。 〜用于解析Web URL基本路径。不是Windows基本路径。

而不是

string str = "~/User" + "/" + Page.User.Identity.Name + "/" + Page.User.Identity.Name + ".aspx";

尝试

string str = Server.MapPath("/User" + "/" + Page.User.Identity.Name + "/" + Page.User.Identity.Name + ".aspx"")

答案 2 :(得分:0)

我要小心~path别名。我尝试使用绝对路径而不是别名,看看是否有帮助。如果它始终重定向到Page.aspx,则您认为正在查看的文件不存在。

答案 3 :(得分:0)

放弃〜

string str = string.Format("/User/{0}/{0}.aspx",Page.User.Identity.Name);
string path = Server.MapPath(str)