今天心情不错。不讨论底层,仅讨论表现。
简单看aspx执行顺序:cs文件的Page_Load 到 aspx文件<html>标签内部。
问题(目的):
后台查询数据库所得的值,和页面上activex控件的js接口返回的值做比对,得到其交集后执行sql查询再绑定到前台页面。
看起来像是pageload加载完成就得到了该信息一样。
首先cs中
<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。
结束。吃饭。
简单看aspx执行顺序:cs文件的Page_Load 到 aspx文件<html>标签内部。
问题(目的):
后台查询数据库所得的值,和页面上activex控件的js接口返回的值做比对,得到其交集后执行sql查询再绑定到前台页面。
看起来像是pageload加载完成就得到了该信息一样。
首先cs中
1
protected void Page_Load(object sender, EventArgs e)
2
{
3
DataList1.DataSource = SqlHelper.GetDataTable("select * from fontlist");
4
DataList1.DataBind();
5
}
然后aspx中的控件
protected void Page_Load(object sender, EventArgs e)2
{3
DataList1.DataSource = SqlHelper.GetDataTable("select * from fontlist");4
DataList1.DataBind();5
}
<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>然后在后面调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>
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();
}
}ok。这个方法还可以适用在多updatapanel,页面上操作一部分,刷新一部分来进行执行后台代码完成Ajax.net的局部刷新,当然updatepanel的属性要设置为Conditional。
结束。吃饭。


浙公网安备 33010602011771号