開發環境 Vs 2008 .Net 3.5
現象 :
工作中 填單頁面,包含填寫內容的控制項和一個提交按鈕.
在後台裡面的指令碼中 ,有一個按鈕的OnClick 事件
事件的內容
儲存不成功 頁面提示一個儲存不成功的友好資訊
成功也一樣
其中寫指令碼的代碼如下:
this.Response.Write("<script>alert('儲存不成功!')</script>");
在運行後,點按鈕 ,儲存不成功的情況下 ,彈出對話方塊 ,但樣式丟失
原因:
在後台 用this.Response 的時候 會先於Render方法 將指令碼添加到回傳到客戶的流中,然後Page
頁面在結束時 調用 render()產生正常的頁面流並也添加到回傳到用戶端的流中,這樣瀏覽器接受到的東西是
<script>alert('儲存不成功!')</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
</body>
</html>
這樣的組合,有時是會出現樣式丟失的問題(這邊是不所有的這樣的情況樣式都會丟失,根本原因不詳) (瀏覽器不能正確的解析)
解決的方法
概要的講 ,就是通過後台對用戶端進行代碼註冊
下面是一個簡單的例子
ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptBlock(typeof(Object), "alert", "<Script> window.alert('故障單提交成功,流水號為" + GetFaultInfo().Fault_NO + "!')</script>",True);
注意 在給方法賦值的時候一定要加上最後面的 True ,這樣的話可以重寫一個頁面上的同一名稱的指令碼塊
ClientScriptManager 類用於管理用戶端指令碼並將它們添加到 Web 應用程式中。
2008/05/28 下午 於上海