2016-09-27 56 views
-1

我想調用關閉或重定向其他頁面的解鎖方法,所以我用了ajax調用。但解鎖方法不會觸發。請讓我知道我在做什麼ajax調用不工作的C#方法

[WebMethod] 
public void Unlock() 
{ 
    CreateProject_BL _objcreatebl = new CreateProject_BL(); 
    _objcreatebl.upd_lockedBy(Convert.ToInt32(Request.QueryString["project_id"]), ""); 
} 

    function HandleOnclose() { 
     $.ajax({ 
      type: "POST", 
      url: "ProjectDetails.aspx/Unlock", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json" 
     }); 
    } 
window.onbeforeunload = HandleOnclose; 
+0

只是想檢查幾件事情,你有沒有確保解鎖函數確實是ProjectDetails.aspx的一部分?另外,ProjectDetails.aspx和HandleOnClose所在的文件位於同一個域中? – snit80

回答

0

你在哪裏傳遞project_id到你的ajax調用? 通在你的方法

[WebMethod] 
public void Unlock(string project_id) 
{ 
    CreateProject_BL _objcreatebl = new CreateProject_BL(); 
    _objcreatebl.upd_lockedBy(Convert.ToInt32(Request.QueryString["project_id"]), ""); 
} 

PROJECT_ID然後重寫Ajax調用作爲

function HandleOnclose() { 
     $.ajax({ 
      type: "POST", 
      url: "ProjectDetails.aspx/Unlock", 
      contentType: "application/json; charset=utf-8", 
      data : "{project_id:'1234'}", 
      dataType: "json" 
     }); 
    } 
window.onbeforeunload = HandleOnclose; 
0

有幾個問題。首先你的WebMethod需要一個querystring參數,但是你發送一個POST請求,你也不會在請求中發送任何數據。您應該將project_id作爲參數提供給AJAX請求的data屬性。

另請注意,在onbeforeunload事件中發送AJAX請求是極少數合法情況之一,您需要使用async: false在AJAX請求完成之前停止關閉該頁面。試試這個:

[WebMethod] 
public void Unlock(string projectId) 
{ 
    CreateProject_BL _objcreatebl = new CreateProject_BL();   
    _objcreatebl.upd_lockedBy(Convert.ToInt32(projectId), ""); 
} 
function HandleOnclose() { 
    $.ajax({ 
     type: "POST", 
     async: false, // only due to running the code in onbeforeunload. Never us it otherwise! 
     url: "ProjectDetails.aspx/Unlock", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: { projectId: '1234' } 
    }); 
} 
window.onbeforeunload = HandleOnclose; 

還要注意的是取決於瀏覽器,你可以從所有發送的onbeforeunload事件AJAX請求進行限制。有關更多詳細信息,請參閱this question

+0

感謝它的工作 – praveen