2011-07-10 18 views
2

私はいくつかのページで再利用したいフォルダ構造ツリーを持っています。私は、このためにユーザーのコントロール(webForms)を構築しています。これは小さなjqueryで、httphandlerから表示されます。ここまでは順調ですね。ユーザーがHTTPハンドラから返すHTMlのフォルダのリンクをクリックできるようにしたいが、httpハンドラから返されたjqueryとページ上の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のを持ってしようとしています.ascickのマークアップで.click()eventhandlerも成功しましたが、今は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

日付を使用してみてください:)あなたが '行うDateTime.Now.ToStringことができます( "YYYY.MM.DD HH:MMの:SS:FFFFを")'そのキャッシュされたかどうかを確認するためにミリ秒を含めますか否か – Rafay

答えて

0

イベントハンドラが割り当てられた後に要素が書き込まれているようです。 24時間後に変更されます

.live("click", function)