3

当我使用以下代码发布页面时,Response.write("Hey") 不会将内容("Hey")写入父页面

<form method="post" name="upload" enctype="multipart/form-data"
action="http://localhost:2518/Web/CrossPage.aspx" >
<input type="file" name="filename" />
<input type="submit" value="Upload Data File" name="cmdSubmit" />
</form>

但是当我使用以下代码并发布数据时,可以在父页面中获得 Response.write("Hey")

 HttpWebRequest requestToSender = (HttpWebRequest)WebRequest.Create("http://localhost:2518/Web/CrossPage.aspx");
 requestToSender.Method = "POST";
 requestToSender.ContentType = "multipart/form-data";

 HttpWebResponse responseFromSender = (HttpWebResponse)requestToSender.GetResponse();
 string fromSender = string.Empty;

 using (StreamReader responseReader = new StreamReader(responseFromSender.GetResponseStream()))
    {
        fromSender = responseReader.ReadToEnd();
    }

在 CrossPage.aspx 我有以下代码

 if (!Page.IsPostBack)
    {
        NameValueCollection postPageCollection = Request.Form;

        foreach (string name in postPageCollection.AllKeys)
        {
            Response.Write(name + " " + postPageCollection[name]);
        }

        HttpFileCollection postCollection = Request.Files;
        foreach (string name in postCollection.AllKeys)
        {
            HttpPostedFile aFile = postCollection[name];
            aFile.SaveAs(Server.MapPath(".") + "/" + Path.GetFileName(aFile.FileName));
        }

        Response.Write("Hey");
    }

我在父页面的 Page_Load 事件中没有任何代码。?

可能是什么原因?我需要使用第一个场景将“嘿”写到父页面。两个应用程序都属于不同的领域。

编辑: “嘿”将来自 CrossPage.aspx。我需要将其写回父页面

当我使用表单操作发布时,在处理 CrossPage.aspx 中的 Page_Load() 事件后,URL 指向“ http://localhost:2518/Web/CrossPage.aspx ”,这意味着应用程序仍在 CrossPage.aspx并没有移动到父页面。

4

5 回答 5

1

您几乎自己找到了原因:

当我使用表单操作发布时,在处理 CrossPage.aspx 中的 Page_Load() 事件后,URL 指向“ http://localhost:2518/Web/CrossPage.aspx ”,这意味着应用程序仍在 CrossPage.aspx并没有移动到父页面。

您的表单将用户带到 CrossPage.aspx,因此父页面消失了,现在是用户历史记录中的上一页。

听起来您正在尝试进行某种异步文件上传。尝试寻找 AJAX 文件上传示例,如下所示:如何异步上传文件?

于 2010-08-24T15:51:46.877 回答
0

我建议将 CrossPage.aspx 更改为 .ashx HttpHandler。Page.IsPostBack 可能无法正常工作,因为它期望 ViewState 和其他隐藏的 ASP.net 表单字段告诉它它是来自 ASP 表单的回发。您也不需要经历 ASP.net Webforms 经历的整个页面生命周期功能。

于 2013-02-06T16:01:06.867 回答
0

我说您的 aFile.SaveAs(Server.MapPath(".") + "/".... 抛出异常。尝试将其注释掉并进行测试。

更新:

我猜它可以从 HttpWebRequest 工作,因为没有文件被发布,因此文件循环被跳过。从 HTML 发布时,您有一个文件输入,因此您的文件循环被使用并导致执行保存逻辑。再说一次,这让我认为这是你的保存逻辑

另外,我认为你有一个try catch声明围绕着所有这一切,exception所以你不知道出了什么问题。如果是这样的话,永远不要那样做。你很少想抓住exception

快速浏览一下你的保存逻辑后,替换"/"@"\". Server.MapPath(".")使用反斜杠而不是正斜杠返回路径。

于 2010-06-16T12:30:47.763 回答
0

可能是因为您将代码放在一个 if (!Page.IsPostBack)块中?只有页面未在回发时加载,才会执行此代码。

(HttpWebResponse)requestToSender.GetResponse();将触发 GET 请求,这就是当您使用该代码调用 Crosspage.aspx 时您的代码正常工作的原因。

于 2010-06-16T12:31:41.503 回答
0

您将页面视为服务。EG 从 ParentPage.aspx 开始 > 将数据传递给 ServicePage.aspx 进行处理 > 将响应写回 ParentPage.aspx 进行显示。

您可以通过将职责传回服务器来使其与 C# 一起使用,这样在跨越页面边界时可以轻松地维护状态。当您尝试在没有 C# 的情况下解决问题时,情况并非如此简单。这不是 Winform 应用程序。正如 NimsDotNet 指出的那样,将方法更改为“get”将使您更接近,但您将被重定向到 CrossPage.aspx 并丢失调用页面。

您说您在“不同的域”上。我认为您的意思是您使用两个不同的 IIS 服务器。正如您所展示的,C# 解决方案仍应在此场景中工作。只需添加 fromSender 对象的 Response.Write() 即可。您没有告诉我们这在技术上是不可能的。不过,如果您想要一个客户端解决方案,您可以使用 javascript 来发出 get 请求而不会被重定向。

这篇文章向您展示了如何使用 JQuery 发出获取请求。

于 2010-06-16T14:01:36.457 回答