2011-07-10 75 views
2

我有一個文件夾結構樹,我想在幾個頁面上重複使用,我正在爲此構建一個用戶控件(webForms),它帶有一個小的jquery,它可以從httphandler顯示html。到現在爲止還挺好。我希望用戶能夠點擊我從我的http處理程序返回的HTMl文件夾上的鏈接,但似乎我的頁面無法將頁面上的jquery與http處理程序返回的jquery連接起來。在我的ascx文件中,我有文件夾鏈接的事件處理程序,並且鏈接在我的http處理程序中生成。問題與asp.net和jQuery AJAX

public void ProcessRequest(HttpContext context) 
     { 
      List<MultimediaType> types = typeRepository.LoadAll(); //load all the types for displaying in the list 
      types.ForEach(x => 
       { 
        multimediaTypes.Add(x.Id, x.Name); 
       }); 
      int folderId = string.IsNullOrEmpty(context.Request["folderid"]) ? 0 : int.Parse(context.Request["folderid"]); 
      //load folders, from query string, if no folderid in querystring, then default to root 
      List<MultimediaFolder> folders = repository.LoadAll(folderId); 


      //load files 
      List<Multimedia> files = fileRepository.LoadAll(folderId); 
      string folderData = BuildFolderList(folders); 
      string fileData = BuildFileList(files); 
      context.Response.ContentType = "text/html"; 
      context.Response.Write("<b>" + DateTime.Now.ToString() + "</b>"); 
      context.Response.Write("<script type='text/javascript'>");    
      context.Response.Write("$('.folderlink').click(function() {"); 
      //context.Response.Write("$.get('FolderStructureHandler.ashx', function (data) {"); 
      context.Response.Write("alert('test');"); 
      context.Response.Write("});"); 
      context.Response.Write("});"); 
      context.Response.Write("</script>"); 

      context.Response.Write("<table border='1'>"); 
      context.Response.Write("<th><td>Name</td><td>Type</td></th>"); 
      context.Response.Write(folderData); 
      context.Response.Write(fileData); 
      context.Response.Write("</table>"); 
     } 

和我的用戶控件的代碼很簡單:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.get("FolderStructureHandler.ashx", function (data) { 
      $("#folderList").html(data); 
     }); 
    }); 
</script> 
<div id="folderList"></div> 

兩種方法寫的HTML很簡單:

private string BuildFolderList(List<MultimediaFolder> folders) 
     { 
      StringBuilder builder = new StringBuilder(); 
      foreach (MultimediaFolder folder in folders) 
      { 
       builder.AppendFormat("<tr><td width='20'><img src='../Images/folder.png'/></td><td colspan='2'><a href='#' class='folderlink'>{0}</a></td></tr>", folder.Name); 
      } 
      return builder.ToString(); 
     } 

我試圖擁有jQuery的在.ascx標記中使用.click()事件處理程序也沒有成功,現在我試圖用http處理程序中的html發送它,但仍然沒有成功。有沒有人可以解決這個問題。

即時得到裝載在第一時間的數據,並認爲我的HTML表格,但是當我點擊一個鏈接沒有任何反應......

真誠,

編輯 小的修改所產生的JQuery從HttpHandler的,現在讓警報(我有一個語法錯誤),但我現在每次調用處理,但日期時間似乎並沒有改變......

新的HttpHandler代碼:

//load files 
      List<Multimedia> files = fileRepository.LoadAll(folderId); 
      string folderData = BuildFolderList(folders); 
      string fileData = BuildFileList(files); 
      context.Response.ContentType = "text/html"; 
      context.Response.Write("<b>" + DateTime.Now.ToString() + "</b>"); 
      context.Response.Write("<script type='text/javascript'>");    
      context.Response.Write("$('.folderlink').click(function() {"); 
      context.Response.Write("$.get('FolderStructureHandler.ashx', function (data) {"); 
      context.Response.Write("alert(data);"); 
      context.Response.Write("});"); 
      context.Response.Write("});"); 
      context.Response.Write("</script>"); 

      context.Response.Write("<table border='1'>"); 
      context.Response.Write("<th><td>Name</td><td>Type</td></th>"); 
      context.Response.Write(folderData); 
      context.Response.Write(fileData); 
      context.Response.Write("</table>"); 

這會創建一個帶有表格的彈出窗口,但日期總是相同的,就好像它被緩存了一樣。

+1

日期後24個小時內將改變:)你可以做'DateTime.Now.ToString( 「YYYY.MM.DD HH:MM:SS:FFFF」)'包括毫秒,看看它的緩存或不 – Rafay

回答

0

聽起來好像你的元素正在寫入事件處理程序分配後。嘗試使用

.live("click", function)