目标:我正在创建一个基本上有文本框和按钮的aspx表单。如果用户单击我想要的按钮(1)用当前日期填写文本框,(2)创建/流式传输pdf给用户打开/保存文件。
问题:当我创建/流式传输pdf时,文本框不会显示我的更改。通过代码逐步执行时,我发现DateCompleted.Text确实发生了变化,但是当我到达包含PDF代码的类时,文本框会恢复原状。没有触发任何类型的错误。
示例代码:
DateCompleted.Text = String.Format("{0:MM/dd/yyyy}", DateTime.Now) ' This works!
' more code.... DateCompleted.Text retains the correct value.....
----- Enters the PDF class...
HttpContext.Current.Response.Clear() ' DateCompleted.Text is still correct**
HttpContext.Current.Response.Charset = "" ' DateCompleted.Text is still correct**
HttpContext.Current.Response.AddHeader("Content-Disposition", _
Convert.ToString("attachment; filename=") & attachmentFilename) _
' DateCompleted.Text is NOT correct (restores previous value)**
所以在上面的例子中,当我执行Response.AddHeader时,我注意到text属性还原了。
问题:知道为什么会这样吗?我试图研究回复和与响应对象相关的问题,但还没有找到解决方案。任何援助将不胜感激!如果您需要澄清任何内容,请告诉我。谢谢!
答案 0 :(得分:2)
请记住,您仍在处理HTTP协议,该协议完全与请求和响应有关。
Always two there are; no more, no less: a request, and a response
每当有人点击您的按钮时,他们会向您的服务器发送请求,您必须创建响应。问题是您只能向请求发送一个响应。您发送带有更新文本框的html文档响应(如果您还不知道,则会发生以下情况:整个html文档被重新创建并从您的服务器发送,然后由浏览器重新加载),或者您发送pdf附件回复。你不能同时做到这两点。
您可以做的是在提交pdf附件请求之前通过javascript更新文本框,或者您可以发送更新文本框的请求,并在响应中包含javascript以发送请求pdf的其他请求。< / p>