当我使用以下代码发布页面时,Response.write(“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>
但是当我使用以下代码并POST数据时,可以在父页面中获取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事件中没有任何代码。?
可能是什么原因?我需要使用第一个场景将“hey”写入Parent页面。这两个应用程序属于不同的域。
编辑:“嘿”将来自CrossPage.aspx。我需要将其写回父页面
当我使用表单操作发布时,在处理CrossPage.aspx中的Page_Load()事件后,URL指向“http://localhost:2518/Web/CrossPage.aspx”,这意味着该应用程序仍在CrossPage.aspx中并且未移动到父页面。
答案 0 :(得分:1)
你几乎找不到理由:
当我使用表单操作发布时,在处理CrossPage.aspx中的Page_Load()事件后,URL指向“http://localhost:2518/Web/CrossPage.aspx”,这意味着该应用程序仍在CrossPage.aspx中并且未移动到父页面。
您的表单将用户带到CrossPage.aspx,因此父页面已消失,现在是用户历史记录中的上一页。
听起来您正在尝试进行某种异步文件上传。尝试查找AJAX文件上传示例,如下所示:How can I upload files asynchronously?
答案 1 :(得分:0)
我说你的aFile.SaveAs(Server.MapPath(“。”)+“/”....正在抛出异常。尝试将其评论并进行测试。
我猜它是从HttpWebRequest工作的,因为没有文件被发布因此跳过了文件循环。从HTML发布时,您有一个文件输入,因此您的文件循环被使用并导致正在执行保存逻辑。再次,这让我认为这是你的保存逻辑
另外,我认为你有一个try catch
语句包含所有这些正在捕捉exception
所以你不知道出了什么问题。如果是这样的话,永远不要这样做。你很少想要抓住exception
。
快速浏览一下您的保存逻辑后,将"/"
替换为@"\"
。 Server.MapPath(".")
使用反斜杠而不是正斜杠返回路径。
答案 2 :(得分:0)
可能是因为你有一个代码
if (!Page.IsPostBack)
阻止?只有页面没有加载回发后才会执行此代码。
(HttpWebResponse)requestToSender.GetResponse();
将触发GET请求,这就是您使用该代码调用Crosspage.aspx时代码正常工作的原因。
答案 3 :(得分:0)
您将页面视为服务。例如。从ParentPage.aspx开始&gt;将数据传递给ServicePage.aspx进行处理&gt;将响应写回ParentPage.aspx进行显示。
通过将职责传递回服务器,您可以使用C#,在跨越页面边界的情况下可以轻松维护状态。当你尝试在没有C#的情况下解决问题时,这并不是那么简单。这不是Winform应用程序。正如NimsDotNet指出的那样,将方法更改为“get”会让您更接近,但是您将被重定向到CrossPage.aspx并丢失调用页面。
你说你在“不同的领域”。我认为你的意思是你使用两个不同的IIS服务器。正如您所示,C#解决方案仍应在此场景中工作。只需添加fromSender对象的Response.Write()即可。没有什么你告诉我们的,这在技术上是不可能的。尽管如此,如果你想要一个客户端解决方案,你可以使用javascript来获取get请求而不会被重定向。
这个post向您展示了如何使用JQuery发出get请求。
答案 4 :(得分:0)
我建议将CrossPage.aspx更改为.ashx HttpHandler。 Page.IsPostBack可能无法正常工作,因为它期望ViewState和其他隐藏的ASP.net表单字段告诉它它是从ASP表单回发的。您也不需要浏览ASP.net Webforms所经历的整个页面生命周期功能。