我看到我的JavaScript和頁面後面的代碼之間的一些奇怪的交互。這裏是頁面:linkbutton回發後提交表單
<form name="form1" id="form1" runat="server">
<button onclick="submitForm()">Submit Form</button>
<asp:LinkButton runat="server" OnClick="btn_download">Download!</asp:LinkButton>
</form>
<script type="text/javascript">
function submitForm()
{
document.form1.submit();
}
</script>
和後面的代碼:
protected void btn_download(object sender, EventArgs e)
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", String.Concat("attachment; filename=", "download.txt"));
string hw = "hello world!";
byte[] info = new byte[hw.Length * sizeof(char)];
System.Buffer.BlockCopy(hw.ToCharArray(), 0, info, 0, info.Length);
Response.OutputStream.Write(info, 0, info.Length);
Response.Flush();
Response.End();
}
當我打的下載按鈕,我得到一個文件的預期。點擊下載後,如果我點擊提交表單按鈕,表單被提交,但它的行爲就像按下了下載 - 觸發btn_download方法。如果我註釋掉btn_download(..)中的代碼,則不會發生這種情況。
如果我在點擊下載按鈕之前點擊提交表單按鈕,它不會觸發btn_download。我試着逐行註釋掉代碼,看起來行Response.appendHeader(..)導致了這個問題。有人可以解釋這裏發生了什麼嗎?爲什麼form1.submit()的行爲就像我點擊下載一樣?