bbbird

思考的时候,请不要停下你的脚步......

博客园 首页 新随笔 联系 订阅 管理
今天心情不错。不讨论底层,仅讨论表现。
简单看aspx执行顺序:cs文件的Page_Load 到 aspx文件<html>标签内部。
问题(目的):
后台查询数据库所得的值,和页面上activex控件的js接口返回的值做比对,得到其交集后执行sql查询再绑定到前台页面。
看起来像是pageload加载完成就得到了该信息一样。

首先cs中
1protected void Page_Load(object sender, EventArgs e)
2{
3        DataList1.DataSource = SqlHelper.GetDataTable("select * from fontlist");
4        DataList1.DataBind();
5}
然后aspx中的控件
<asp:ScriptManager ID="ScriptManager1" runat="server">
                  
</asp:ScriptManager>
                  
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
                      
<ContentTemplate>
                  
<asp:DataList ID="DataList1" runat="server" DataKeyField="Fontid" RepeatColumns="4" RepeatDirection="Horizontal" style="text-align: left">
                      
<ItemTemplate>
                          
<span class="style_org2">·</span><a href='/fonts/<%# Eval("filename") %>'><%# Eval("fontname")%></a>
                      
</ItemTemplate>
                  
</asp:DataList>
                          
<asp:Button ID="Button1" runat="server" Text="" style="display:none" OnClick="Button1_Click"/>
    
<input id="hfont" type="hidden" runat="server" />
                      
</ContentTemplate>
                  
</asp:UpdatePanel>
UpdatePanel里面搞一个style="display:none"的button。
然后在后面调js:
<script language="javascript">
setTimeout('fontlist();',
10);
function fontlist()
{
    
var text;
    
var nCount = eval(ocxName).GetFontCount();
    
for( n=0; n<nCount -1; n++ ) 
    
{
     text 
+= "'" + eval(ocxName).GetFontName(n)+"',";
    }

    text 
+= "'" + eval(ocxName).GetFontName(nCount -1)+"'";
    text 
= text.replace("undefined","");
    document.getElementById('hfont').value 
= text;
    
//document.getElementById('TextBox1').innerText = text;
    setTimeout('__doPostBack(\'Button1\',\'\')',1);
    
return false;
}

</script>
   setTimeout('__doPostBack(\'Button1\',\'\')',1);执行Button1的事件到后台。
string s = System.Text.Encoding.GetEncoding("gb2312").GetString(Request.BinaryRead(Request.ContentLength));
        NameValueCollection list 
= HttpUtility.ParseQueryString(s);
        
string ss = list["hfont"];
        
if (ss.Length > 1)
        
{
            DataTable dt 
= SqlHelper.GetDataTable(string.Format("select * from fontlist where fontname not in ({0})", ss));
            
if (dt != null && dt.Rows.Count > 0)
            
{
                DataList1.DataSource 
= dt;
                DataList1.DataBind();
            }

        }
然后隐藏控件hfont完成了前后台传值。datalist数据绑定。updatepanel局部刷新。

ok。这个方法还可以适用在多updatapanel,页面上操作一部分,刷新一部分来进行执行后台代码完成Ajax.net的局部刷新,当然updatepanel的属性要设置为Conditional
结束。吃饭。
posted on 2007-12-15 12:08  LionHeartKU  阅读(956)  评论(0)    收藏  举报