我有一个文件夹结构树,我希望在几个页面上重用我正在为此构建一个用户控件(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>");
这会创建一个包含表格的弹出窗口,但日期总是相同的,就像它被缓存一样。???
答案 0 :(得分:0)
听起来你的元素是在分配事件处理程序之后编写的。尝试使用
.live("click", function)