已经无数次见到有人提出这个问题了。。。。。
用.net控件TreeView而展开时不刷新的变通方法主要有以下步骤:
1。在Page_Load中为你的TreeView添加以下属性,这句话为TreeView添加Click时的回发事件。
TreeView1.Attributes["OnClick"] = @"javascript: window.setTimeout('__doPostBack(/'TreeView1/',/'/')', 0,
'JavaScript')";
2。在.aspx页面文件中添加一个隐藏的Button用来产生TreeView的回发事件:
<INPUT id="Button1" style="DISPLAY:none;" type="button" value="Button" name="Button1" runat="server">
这个Button必须为Html控件,并将其转为在服务器端运行。
style="DISPLAY:none;"该句用来在页面隐藏Button。
在Visual.net的设计界面双击该Button产生以下事件:
private void Button1_ServerClick(object sender,System.EventArgs e)
{
}
这里不用添加任何代码,目的是当服务器处理该页面并发送给客户端时产生下面客户端脚本:
<script language="javascript">
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform = document.Form1;
theform.__EVENTTARGET.value = eventTarget;
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>
这段代码用于回应TreeView的Click事件。。。。。。。。。。。。。。。。。。。此代码不用手工添加。。。。。
3。好。。。大功告成。。。为你的TreeView添加TreeView1_SelectedIndexChange事件:
在设计界面,TreeView上右键属性。。。事件。。找到SelectedIndexChange。。。双击。。在cs文件中产生。。
private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
}
在里面添加测试代码。。。
Microsoft.Web.UI.WebControls.TreeNode NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
Response.Write(NewNode.GetNodeIndex());
。。。。。。。。OK。。。。。。。。。。。。。。。。
测试地址。。。。http://eu.webmatrixhosting.net/ganggang/tree.aspx。。。有点慢大家谅解。。。
有什么问题请提出。。。。。。呵呵。。。。。
------------------------------------------------------------------------------------------------------------
关于类似的TreeView展开不提交,点击才提交,我也有一个方法
http://eu.webmatrixhosting.net/hgknight/tree.aspx
方法如下
可以将autopostback设置成false;
在body里添加 <body οnlοad="initTree()">
然后在PageLoad里写:
string strTreeName = "TreeView1";
string strRef = Page.GetPostBackEventReference(TreeView1);
string strScript = "<script language=/"JavaScript/"> /n" +
"<!-- /n" +
" function initTree() { /n" +
" " + strTreeName + ".onSelectedIndexChange =
function() { /n" +
" if (event.oldTreeNodeIndex !=
event.newTreeNodeIndex) /n" +
"
this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' +
event.newTreeNodeIndex); /n" +
" window.setTimeout('" +
strRef.Replace("'","//'") + "', 0, 'JavaScript'); /n" +
" } /n" +
" } /n" +
"// --> /n" +
"</script>";
Page.RegisterClientScriptBlock("InitTree",strScript );
这样就只有你点击的节点更改的时候才提交!
to monkey_zeng(未来报告)
顺便说一下,慢是由于服务器的问题,你可以在本机测试一下这个方法:)