Response.AddHeader似乎是撤消简单代码来设置文本框的文本属性

时间:2014-12-15 23:39:28

标签: asp.net vb.net autopostback

目标:我正在创建一个基本上有文本框和按钮的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属性还原了。

问题:知道为什么会这样吗?我试图研究回复和与响应对象相关的问题,但还没有找到解决方案。任何援助将不胜感激!如果您需要澄清任何内容,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:2)

请记住,您仍在处理HTTP协议,该协议完全与请求和响应有关。

  

Always two there are; no more, no less: a request, and a response

每当有人点击您的按钮时,他们会向您的服务器发送请求,您必须创建响应。问题是您只能向请求发送一个响应。您发送带有更新文本框的html文档响应(如果您还不知道,则会发生以下情况:整个html文档被重新创建并从您的服务器发送,然后由浏览器重新加载),或者您发送pdf附件回复。你不能同时做到这两点。

您可以做的是在提交pdf附件请求之前通过javascript更新文本框,或者您可以发送更新文本框的请求,并在响应中包含javascript以发送请求pdf的其他请求。< / p>