在辦公自動化的流程中希望實現電子簽名。
思路:
1、圖片的存放:安全起見存放在庫中為宜。最好不能被輕易下載。
2、使用的過程:顯示一個密碼框和“簽名”按鈕,輸入密碼並按下按鈕後,如果正確,隱藏輸入框和按鈕,顯示圖片。
3、我的所有控制項都是通過解析xml後動態產生的,簽名應該是一個新類別無疑(類別4),它至少得對兩個地方增加代碼:(1)建立部分(得同時建立輸入密碼框、按鈕、圖片顯示框)(2)寫入部分,得解析出實際的值,存在xml中。
困難之一:圖片的存入和取出
解決:網上的方法很多,改下就行了。我用的顯示方法是,圖片指向一個連結,該連結返回一個純圖片,因而這個圖片不能被儲存。
困難之二:動態產生的按鈕的響應事件
解決:在外面寫好按鈕的處理方法,然後把委託作為參數傳遞給建立函數。如下
/**//// <summary>
/// 重載:根據xml字串產生動態控制項,顯示所有欄位
/// 布局有一些預設屬性(不再設為類的屬性,那樣就要求建立對象並保持)
/// 根據目前使用者決定是否有許可權操作operator
/// ***********下拉式清單額外增加了一個空值**********
/// </summary>
/// <param name="xmldoc"></param>
/// <param name="contain"></param>
/// <param name="top"></param>
static public void CreateControl(string strXml,HtmlContainerControl contain,int top,int left,System.EventHandler SignHandle)
{
調用:
XmlPage.CreateControl(xmldoc,DIV2,40,0,new System.EventHandler(this.SignButton_Click)); //載入改分類的預設屬性
困難之三:這個比較不起眼,但其實很麻煩。原因:有按鈕就有多次PostBack->需要每次都動態建立原來的控制項->每次動態建立控制項,都會重寫控制項->
(1)對於可見的控制項,如文字框,雖然理論上講動態建立過程可能講剛剛填入的內容抹掉,但實際上沒有,Postback前填入的內容依然存在,所以不會有問題。
(2)對於密碼輸入框,Postback後內容就消失了,所以無法儲存輸入的內容。那麼,簽名的值就很難被儲存住。試過很多的方法:用label不行,最後寫入時無法取到label的值(被初始的載入語句抹了),用textbox,隱藏的Textbox直接就不會傳送到用戶端(並非我想象的是一個Hidden的Input)。
解決:在簽名檢驗成功後,直接對Session中儲存的xmldoc進行寫,唯寫簽名的值,其它的都不動。最後寫入時,跳過簽名的類型不管(因為已經寫過了)
困難之四:不同的類型的xml切換時會出現控制項重疊出現。
解決:原因比較簡單,沒有移除上次的內容引起,移除就OK了。