试过用复合控件包含treeview控件,但是失败,这次在右键菜单调用tree的回发js成功可以在页面后台绑定被编辑的节点,后台3个函数都可以编辑用c#传的参数e.mynode就是右键菜单的选中的节点
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;
using System.Text;
using System.Drawing.Design;
using System.IO;
namespace ServerControl1
{
[Serializable]
public class TreeViewc : TreeView
{
public TreeViewc()
{
}
[Bindable(true)]
[Category("搜索")]
[Description("资源(image/css/js)的客户端根目录")]
public string ClientScriptPath
{
get
{
String s = (String)ViewState["ClientScriptPath"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["ClientScriptPath"] = value;
}
}
protected override void RaisePostBackEvent(string eventArgument)
{
base.RaisePostBackEvent(eventArgument);
TreeNode tnNode = new TreeNode();
// base.RaisePostBackEvent(eventArgument);
string sa = eventArgument.ToString();
/* for (int i = 0; i < this.Nodes.Count; i++)
{
if (this.Nodes[i].Value == sa.Substring(sa.IndexOf('=')+1))
{
tnNode = this.Nodes[i];
}
}*/
string df = sa.Substring(sa.IndexOf('=') + 1).Replace("\\","/");
tnNode = this.FindNode(df);
// tnNode.ChildNodes.Clear();
if (sa.StartsWith("copy"))
{
Oncopynode(new nodeEventArgs(tnNode));
}
if (sa.StartsWith("paste"))
{
Onpastenode(new nodeEventArgs(tnNode));
}
if (sa.StartsWith("cut"))
{
Oncutnode(new nodeEventArgs(tnNode));
}
if (sa.StartsWith("delete"))
{
Ondeleteenode(new nodeEventArgs(tnNode));
}
}
public event EventHandler copynode;
protected virtual void Oncopynode(EventArgs e)
{
if (copynode != null)
{
copynode(this, e);
// Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
}
}
public event EventHandler pastenode;
protected virtual void Onpastenode(EventArgs e)
{
if (pastenode != null)
{
pastenode(this, e);
// Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
}
}
public event EventHandler addnode;
protected virtual void Onaddnode(EventArgs e)
{
if (addnode != null)
{
addnode(this, e);
// Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
}
}
public event EventHandler deleteenode;
protected virtual void Ondeleteenode(EventArgs e)
{
if (deleteenode != null)
{
deleteenode(this, e);
// Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
}
}
public event EventHandler cutnode;
protected virtual void Oncutnode(EventArgs e)
{
if (cutnode != null)
{
cutnode(this, e);
// Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "", "<script language='javascript' >alert('dfsd');</script>");
}
}
/* protected override void RenderContents(HtmlTextWriter output)
{
output.Write("控件属性示例, 请从:设计器界面<=>代码视图界面 切换查看效果.");
}*/
protected override void Render(HtmlTextWriter output)
{
base.Render(output);
// this.RenderControl(output);
output.AddAttribute(HtmlTextWriterAttribute.Id, "myMenu");
output.AddAttribute(HtmlTextWriterAttribute.Class, "contextMenu");
output.RenderBeginTag(HtmlTextWriterTag.Ul);
output.AddAttribute(HtmlTextWriterAttribute.Class, "copy");
output.RenderBeginTag(HtmlTextWriterTag.Li);
string href2 = Page.ClientScript.GetPostBackClientHyperlink(this, "this.svr").Replace("'this.svr'", "this.svr");
output.AddAttribute(HtmlTextWriterAttribute.Href, href2);
output.RenderBeginTag(HtmlTextWriterTag.A);
// output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
output.Write("复制");
output.RenderEndTag();
output.RenderEndTag();
output.AddAttribute(HtmlTextWriterAttribute.Class, "cut");
output.RenderBeginTag(HtmlTextWriterTag.Li);
string href23 = Page.ClientScript.GetPostBackClientHyperlink(this, "this.svr").Replace("'this.svr'", "this.svr");
output.AddAttribute(HtmlTextWriterAttribute.Href, href23);
output.RenderBeginTag(HtmlTextWriterTag.A);
// output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
output.Write("剪切");
output.RenderEndTag();
output.RenderEndTag();
output.AddAttribute(HtmlTextWriterAttribute.Class, "paste");
output.RenderBeginTag(HtmlTextWriterTag.Li);
string href233 = Page.ClientScript.GetPostBackClientHyperlink(this, "this.svr").Replace("'this.svr'", "this.svr");
output.AddAttribute(HtmlTextWriterAttribute.Href, href233);
output.RenderBeginTag(HtmlTextWriterTag.A);
// output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
output.Write("粘贴");
output.RenderEndTag();
output.RenderEndTag();
output.AddAttribute(HtmlTextWriterAttribute.Class, "delete");
output.RenderBeginTag(HtmlTextWriterTag.Li);
string href = Page.ClientScript.GetPostBackClientHyperlink(this, "this.svr").Replace("'this.svr'", "this.svr");
output.AddAttribute(HtmlTextWriterAttribute.Href, href);
output.RenderBeginTag(HtmlTextWriterTag.A);
// output.Write("<a href=javascript:PostBackFromClient_" + this.ClientID + "();>editos</a>");
output.Write("删除");
output.RenderEndTag();
output.RenderEndTag();
output.AddAttribute(HtmlTextWriterAttribute.Class, "quit");
output.RenderBeginTag(HtmlTextWriterTag.Li);
// string href3 ="javascript: $('myMenu').hide()";
// output.AddAttribute(HtmlTextWriterAttribute.Href, href3);
// output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write("<a href=\"javascript:a()\">取消</a>");
// output.Write("新建");
// output.RenderEndTag();
output.RenderEndTag();
output.RenderEndTag();
/* output.Write("控件属性示例, 请从:设计器界面<=>代码视图界面 切换查看效果.");*/
}
protected override void OnPreRender(EventArgs e)
{
string strJSPath = base.ResolveUrl(Path.Combine(this.ClientScriptPath, @"treejb.js"));
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "treejb"))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "treejb",
"<script type='text/javascript' src='" + strJSPath + "'></script>", false);
}
base.OnPreRender(e);
}
}
}
public static TreeNode StaTreeNode = new TreeNode();
protected void Treecnt1_TextChanged1(object sender, EventArgs e)
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Prompt",
"<script language='javascript' >alert('oe');</script>");
}
protected void TreeViewc1_copynode(object sender, EventArgs e)
{
StaTreeNode = new TreeNode((e as nodeEventArgs).MyNode.Text,(e as nodeEventArgs).MyNode.Value);
// StaTreeNode.ChildNodes.Clear();
// ViewState["tno"] = (e as nodeEventArgs).MyNode;
string s = (e as nodeEventArgs).MyNode.Value.ToString();
string b = s;
/* this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Prompt",
"<script language='javascript' >alert('"+b+"');</script>");*/
}
protected void TreeViewc1_SelectedNodeChanged(object sender, EventArgs e)
{
TreeView n = sender as TreeView;
string sd = n.Nodes.Count.ToString();
// int a = 0;
}
protected void TreeViewc1_pastenode(object sender, EventArgs e)
{
TreeNode tyh= (e as nodeEventArgs).MyNode;
tyh.ChildNodes.Add(StaTreeNode);
string s = (e as nodeEventArgs).MyNode.Value.ToString();
string b = s;
/* this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Prompt",
"<script language='javascript' >alert('" + b + "');</script>");*/
}
protected void TreeViewc1_cutnode(object sender, EventArgs e)
{
StaTreeNode = (e as nodeEventArgs).MyNode;
StaTreeNode.Parent.ChildNodes.Remove(StaTreeNode);
}
protected void TreeViewc1_deleteenode(object sender, EventArgs e)
{
(e as nodeEventArgs).MyNode.Parent.ChildNodes.Remove((e as nodeEventArgs).MyNode);
}
// int a = 0;
var svr;
function a() {
/* alert(ev.pageX);
alert('aa')*/
$("#myMenu").css({
"display": "none"
})
}
$(document).ready(function() {
// alert($("#myMenu"))
var f = $("#TreeViewc1").find("a");
// alert(m.length);
// var f = m.filter("a");
// alert(f.length);
for (var i = 0; i < f.length; i++) {
// alert(f[i].id)
f[i].oncontextmenu = function(ev) {
// alert(ev.pageX);
// svr = ev.currentTarget.innerHTML;
svr = ev.currentTarget.href;
// alert(svr);
/* $("#myMenu").style.display = "block";
$("#myMenu").style.left = ev.pageX;
$("#myMenu").style.top = ev.pageY;*/
$("#myMenu").css({
"display": "block",
"left": ev.pageX,
"top":
ev.pageY
})
$(".copy").children("a").attr("href", svr.replace(",'s", ",'copy="));
$(".cut").children("a").attr("href", svr.replace(",'s", ",'cut="));
$(".paste").children("a").attr("href", svr.replace(",'s", ",'paste="));
$(".delete").children("a").attr("href", svr.replace(",'s", ",'delete="));
return false;
}
}
});
/* Generic context menu styles */
.contextMenu {
position: absolute;
width: 120px;
z-index: 99999;
border: solid 1px #CCC;
background: #EEE;
padding: 0px;
margin: 0px;
display: none;
}
.contextMenu LI {
list-style: none;
padding: 0px;
margin: 0px;
}
.contextMenu A {
color: #333;
text-decoration: none;
display: block;
line-height: 20px;
height: 20px;
background-position: 6px center;
background-repeat: no-repeat;
outline: none;
padding: 1px 5px;
padding-left: 28px;
}
.contextMenu LI.hover A {
color: #FFF;
background-color: #3399FF;
}
.contextMenu LI.disabled A {
color: #AAA;
cursor: default;
}
.contextMenu LI.hover.disabled A {
background-color: transparent;
}
.contextMenu LI.separator {
border-top: solid 1px #CCC;
}
/*
Adding Icons
You can add icons to the context menu by adding
classes to the respective LI element(s)
*/
.contextMenu LI.edit A { background-image: url(images/page_white_edit.png); }
.contextMenu LI.cut A { background-image: url(images/cut.png); }
.contextMenu LI.copy A { background-image: url(images/page_white_copy.png); }
.contextMenu LI.paste A { background-image: url(images/page_white_paste.png); }
.contextMenu LI.delete A { background-image: url(images/page_white_delete.png); }
.contextMenu LI.quit A { background-image: url(images/door.png); }