layer實現在前台刪除前確認彈出框,並回調后台刪除事件


最近遇到一些問題,用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為提交參數,沒有參數時為空就行了。
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)
    {
        //綁定數據;
    }
}
  • 解決辦法2:
在頁面頭部<%@Page ....  %>中添加  EnableEventValidation="false"
 
這個時候再執行,頁面已經能正常layer提示並刪除了,希望會幫到你。
PS:寫的比較匆忙,有任何意見和建議的望回復,我也會更正錯誤、解決問題。
 
 
                             本篇經驗系本人依照真實經歷原創,未經許可,謝絕轉載。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM