asp.net和jquery AJAX的问题

时间:2011-07-10 21:34:01

标签: jquery asp.net

我有一个文件夹结构树,我希望在几个页面上重用我正在为此构建一个用户控件(webForms),它有一个小的jquery,可以从httphandler中显示html。到现在为止还挺好。我希望用户能够单击HTMl从我的http处理程序返回的文件夹上的链接,但似乎我的页面无法使用http处理程序返回的jquery连接页面上的jquery。在我的ascx文件中,我有文件夹链接的事件处理程序,链接是在我的http处理程序中生成的。

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();
        }

我也尝试在.ascx标记中使用jquery .click()事件处理程序,但是没有成功,现在我尝试使用http处理程序中的html发送它,仍然没有成功。有没有人可以解决这个问题。

我第一次加载数据并看到我的html表,但是当我点击链接时没有任何反应......

此致

修改 从HTTPHandler对生成的JQuery进行微小的修改,它现在发出警报(我有语法错误),但现在我每次都调用处理程序,但日期时间似乎没有改变......

新的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 个答案:

答案 0 :(得分:0)

听起来你的元素是在分配事件处理程序之后编写的。尝试使用

.live("click", function)