2012-06-10 183 views
2

我想跟蹤用戶活動(日誌數據)。我在網頁上有幾個環節它通過特定的方式。問題是提交表單:如何記錄提交表單提交的鏈接點擊?

我無法找到一個合適的方式來處理click事件,並以簡單的方式插入的記錄在數據庫中。

我的代碼:

HtmlGenericControl a = new HtmlGenericControl("a"); 
a.Attributes["onclick"] = "$('#" + frm.ClientID + "').submit();"; 
a.InnerText = "site " + dt_list.ElementAtOrDefault(0).Field<string>("pro_name").TrimEnd(); 
inner_li_1.Controls.Add(a); 

現在我想處理鏈接的點擊事件,這使得提交!

+3

處理客戶端腳本絕對不是一個簡單的方法。我相信我曾經告訴過你兩次... – gdoron

+0

:) :)你可以建議一個答案,因爲我認爲處理它的客戶端然後存儲日誌數據庫是更復雜的! –

+0

如果您可以向我們展示**呈現的** HTML,以及您想如何處理它,我可以回答。 – gdoron

回答

2

這太過分了,怎麼過的作品,我用它,我不能做其他方式的一些情況。

javascript調用,我先調用日誌,然後繼續提交。當我點擊時,我也會顯示一個等待消息,事件發生的速度太快,用戶不明白這是等待什麼。我也注意避免使用簡單的JavaScript來記錄動作的雙重記錄。我在onclick事件上稱這個函數。

var confirmSubmited = false; 
function SubmitWithLog(me) 
{ 
    // to avoid many clicks... 
    if(confirmSubmited) 
     return false; 

    confirmSubmited=true; 

    jQuery.ajax({ 
     url: "/LogAction.ashx", 
     type: "GET", 
     timeout: 3000, 
     async: true, // you can try and async:false - maybe is better for you 
     data: action=4, // here you send the log informations 
     cache: false, 
     success: function(html) { 
      jQuery("#FormID").submit(); 
     }, 
     error: function(responseText, textStatus, XMLHttpRequest) {     
      jQuery("#FormID").submit(); 
     } 
    }); 

    return false; 
} 

的處理程序是

public class LogAction : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
       // log here what you wish 

       // end up with no content 
     context.Response.TrySkipIisCustomErrors = true; 
     context.Response.Status = "204 No Content"; 
     context.Response.StatusCode = 204;   
    } 
} 

我希望搞清楚,這是不記錄用戶操作的好辦法,但是當你無法以其他方式儘自己的一種方式。我只使用它,當用戶提交併離開我的網站並轉到另一個網站時,我用它來寫這個動作。

在我使用的醚的URL的引用,醚化妝登錄代碼後面的所有其他情況下,醚我包括在HTML頁面的空白圖像,使日誌這樣的:ASP server stats for html pages

我試着調用阿賈克斯,並正確的方式提交,但其失敗,阿賈克斯是通過提交停止。接下來的方法是使用超時,調用ajax,並設置超時500ms進行提交,但我避免了超時,因爲ajax調用的時間少於100ms,因爲我已經完成了。

+0

如何使用Submitwithlog保存在日誌中我的數據庫! 我用我的代碼如下方法: 'base.TraceActivity( 「.....」,請 「https://」 + Request.Url.Authority + 「/LoginPage.aspx」 ,統計[0],統計[1],統計[2]);' –

+0

@just_name你創建一個名爲'LogAction.ashx'的處理程序,然後在那裏創建日誌...其實我在這裏調用處理程序之前使submition。 – Aristos

+1

@just_name它不是那麼簡單的,有點複雜,從另一方面,如果你知道它不是那麼複雜:)及其作品。 – Aristos

1

@Aristos - 世界爲什麼你會消極地等待Ajax調用,它記錄與事件在移動之前返回用戶體驗影響(點擊提交,無論...)?!?日誌記錄是應用程序的一個非關鍵部分,用戶體驗不會根據其結果進行更改。這是一個「發送和忘記」類型的例程。觸發Ajax請求,將成功和失敗例程保留爲空,並在$ .ajax()後立即執行提交。呼叫。

所以,在代碼隱藏一些對你的僞代碼...

function handleClick(e) { 
    handleLoggingOnClick("something happened here"); 

    myForm.submit(); 
} 

function handleLoggingOnClick(message) { 
    $.ajax({url:"logging.do", data:"message="+message}); 
} 
+0

因爲我已經嘗試過了,並且由於submit是停止ajax,所以它沒有生成日誌。我的代碼來自真正的詞網絡...我的意思是我用我的網頁與真正的用戶和測試。 – Aristos

+0

我想明確指出,這種記錄方式不適用於太多的頁面,必須使用一種簡單的不同方式 - 完全不同的設計。怎麼會有一些罕見的情況,這是唯一的方法。我用它只記錄一次點擊,只在我的程序中一頁。 – Aristos

相關問題