2016-09-27 110 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