最近遇到一些問題,用layer提示消息框,比如刪除時,提示消息確定后 return false時,則不管用了,因為layer不支持阻塞,下面就解決一下這個問題:(本文使用Xcode,如要學習,請復下面連接到地址欄:http://www.cnblogs.com/nnhy/archive/2012/02/27/2369263.html)
刪除按鈕代碼:
<asp:Button ID="btnDel" name="btnDel" runat="server" Text="刪除" class="btn btn-gray" OnClientClick="return resDel();" OnClick="btnDel_Click" UseSubmitBehavior="false" />
注意添加屬性 UseSubmitBehavior="false" 這個屬性必須添加,使刪除按鈕手動提交
基本思路為:
重新寫一個函數來封閉下layer.confirm();如下
參數說明:msg為提示信息內容,eventTarget為要提交到后台事件的控件name,eventArgument為提交參數,沒有參數時為空就行了。
參數說明:msg為提示信息內容,eventTarget為要提交到后台事件的控件name,eventArgument為提交參數,沒有參數時為空就行了。
1 function layerConfirm(msg, eventTarget, eventArgument) { 2 layer.confirm(msg, function (index) { 3 __doPostBack(eventTarget, eventArgument); 4 5 }); 6 7 }
以下為詳細解析:
js的代碼:
<script type="text/javascript"> function resDel() { layer.confirm("您確定要刪除嗎?", function (index) { __doPostBack('btnDel', '1'); }); } </script>
后台刪除按鈕事件代碼:
1 /// <summary> 2 /// 刪除按鈕事件 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 protected void btnDel_Click(object sender, EventArgs e) 7 { 8 string select = CRequest.GetString("selectid"); 9 if (select.Trim() == "") 10 { 11 Jscript.Alert("您沒有選擇數據!", this.Page); 12 return; 13 } 14 if (_user.DepartmentTypeId == (int)AdminDepartmentTypeEnums.Manager || _user.IsGroupLeader) 15 { 16 FriendlyLink.DeleteAll(string.Format("Id in({0})", select)); 17 Jscript.AlertAndRedirect("刪除成功!", this.Request.RawUrl); 18 } 19 else 20 { 21 Jscript.Alert("您沒有權限刪除!", this.Page); 22 return; 23 } 24 }
這時還要在Page_load里添加回調的判斷語句(代碼如下):
1 string controlName = Request.Params.Get("__EVENTTARGET");//eventTarget為要提交到后台事件的控件name 2 string eventArgument = Request.Params.Get("__EVENTARGUMENT");//用此參數判斷按鈕是否被點擊(參數值可隨意寫) 3 if (controlName == "btnDel" && eventArgument == "1")//判斷兩個參數是否滿足對應的數據,如滿足則調用事件 4 { 5 btnDel_Click(sender, e); 6 }
這時執行會發現
頁面報這個錯誤
- 發生原因:
.NET基於頁面中的輸出元素會在最終頁面中生成一個__EVENTVALIDATION隱藏字段。做了一個簡單的測試。頁面中創建一個<asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" />,同時創建對應的Click事件處理程序。運行程序,可以正確響應事件。然后設置btnSubmit.Visable=false,手動在頁面 上面添加<input type="submit" name="btnSubmit" value="Submit" />。運行程序,會出現一個包含EnableEventValidation內容的異常。設置<@Page EnableEventValidation="false">再運行程序,又可以正確響應事件。觀察前后兩次__EVENTVALIDATION 的內容,可以發現是不同的。關於出現的異常,可以認為在輸出的時候沒有包含btnSubmit,可是再提交到后台的時候卻有相應的內容,前后不一致,所以 在開啟事件校驗的情況下.NET拋出了異常。
- 解決辦法1:
Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//綁定數據;
}
}
{
if (!Page.IsPostBack)
{
//綁定數據;
}
}
- 解決辦法2:
在頁面頭部<%@Page .... %>中添加 EnableEventValidation="false"
這個時候再執行,頁面已經能正常layer提示並刪除了,希望會幫到你。
PS:寫的比較匆忙,有任何意見和建議的望回復,我也會更正錯誤、解決問題。
本篇經驗系本人依照真實經歷原創,未經許可,謝絕轉載。