C# 为什么响应.写入行为在给定场景中有所不同?

C# 为什么响应.写入行为在给定场景中有所不同?,c#,asp.net,cross-domain,response.write,C#,Asp.net,Cross Domain,Response.write,当我使用以下代码发布页面时,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="

当我使用以下代码发布页面时,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>
 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");
    }
我在父页面的页面加载事件中没有任何代码

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

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

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

我说您的aFile.SaveAs(Server.MapPath(“.”+“/”)正在引发异常。请尝试对其进行注释并测试

更新:
我猜它在HttpWebRequest中起作用,因为没有文件被发布,因此文件循环被跳过。当从HTML发布时,您有一个文件输入,因此您的文件循环被使用,并导致执行保存逻辑。因此,这再次让我认为这是您的保存逻辑

另外,我认为您有一个
try catch
语句,它围绕着捕获
异常
,因此您不知道出了什么问题。如果是这样,千万不要这样做。您很少想捕获
异常


快速浏览您的保存逻辑后,将
“/”
替换为
@“\”
Server.MapPath(“.”
使用后斜杠而不是前斜杠返回路径。

可能是因为代码位于
if(!Page.IsPostBack)
block?只有当页面未加载回发时,才会执行此代码


(HttpWebResponse)requestToSender.GetResponse();
将触发GET请求,这就是为什么当您使用该代码调用Crosspage.aspx时,代码会工作。

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

通过将任务传递回服务器,在服务器上跨页面边界时可以轻松维护状态,从而使它能够与C一起工作。在没有C的情况下解决问题并不简单。这不是Winform应用程序。正如NimsDotNet指出的,将方法更改为“get”将使您更接近,但您将被重定向到CrossPage.aspx并丢失呼叫页面

你说你在“不同的域”。我想你的意思是你在使用两个不同的IIS服务器。C#解决方案应该在这个场景中仍然有效,正如你所示。只需添加一个响应。Write()fromSender对象。您没有告诉我们这在技术上是不可能的。但是,如果您想要客户端解决方案,您可以使用javascript发出get请求,而不必重定向


这向您展示了如何使用JQuery发出get请求。

您自己差点就找到了原因:

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

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


听起来好像您正在尝试进行某种异步文件上载。请尝试查找AJAX文件上载示例,类似这样的示例:

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

您好从何而来?代码中没有这一点……“嘿”是从交叉页到父页的一种确认。父页是帖子最初到交叉页进行响应的页面。写入“for循环”工作,只是Hey is Not?Response.Write不在for循环中。您是否使用fiddler查找了这两个WebRequest中的差异?它可能会为您提供一条线索,说明行为不同的原因。当然,它应该只在页面加载时起作用,因为CrossPage.aspx页面中没有任何post Page事件。GetResponse()中的“Get”页面并不意味着HTTP GET.requestToSender.Method=“POST”;让它成为一个帖子奇怪的是,我在我这端运行了代码,删除了保存逻辑后,它按照预期运行。我能知道它引发了什么样的异常吗?我只是注释掉了保存逻辑,因为我没有花时间设置任何要测试的文件。没有异常。注释掉的保存逻辑都能正常工作。我猜它是从H开始工作的ttpWebRequest因为没有文件被发布,所以跳过了文件循环。当从HTML发布时,你有一个文件输入,因此你的文件循环被使用,并导致要执行的保存逻辑。所以再次,这让我认为这是你的保存逻辑。这是你正在使用的确切代码吗?或者你简化了它以在这里发布吗?我很抱歉essing你有一个try-catch语句,它围绕着捕获“异常”这样你就不知道出了什么问题。如果是这样的话,千万不要这样做。你很少想捕获“异常”