在asp:Button的响应函数里调用了ClientScript.RegisterStartupScript(),但页面会刷新,导致页面上
通过javascript绘制的整个区域重新绘制并加载数据,速度非常慢想知道如何才能通过RegisterStartupScript()执行前台脚本,而不导致整个前台绘制区域重新绘制。用.net自带的ajax能否实现呢?要怎么做?谢谢了!!!!
通过javascript绘制的整个区域重新绘制并加载数据,速度非常慢想知道如何才能通过RegisterStartupScript()执行前台脚本,而不导致整个前台绘制区域重新绘制。用.net自带的ajax能否实现呢?要怎么做?谢谢了!!!!
解决方案 »
- flash怎么得到asp.net中的数据
- 做的网页ie6不兼容,出现文字逆时针倒转。怎么办?
- 实现datagrid的标题栏隐藏问题?
- 求助各位了,我想用WEB程序打印报表,应该怎么做?谢谢先
- 两个aspx共用一个cs行不行?
- 【菜鸟提问】如何将asp.net里面的session传到asp里面去呢?
- ◆◇◆ 一个链接包含在一个Frame中,如何将链接跳出? ◆◇◆
- 迷惑啊Session怎么才能在类文件使用????
- 怎么创建可以添加到工具箱里的,像textbox那样的,在asp.net项目里,可以添加到网页上的控件。谢谢!
- 怎么换首页啊?
- NHibernate
- 如何改变TreeView的某个节点的字体颜色?
前台脚本ID用<%=控件ID.ClentID%>
后台用。。ScriptManager.RegisterClientScriptBlock
2:可以继承ICallbackEventHandler接口,实现该接口方法
3:js|jq ajax
嗯,我试了这种方法,后台代码如下:
protected void CreatePostBackScriptBlocks()
{
string cbReference = "<script>function OnSthCreated(){" + ClientScript.GetPostBackEventReference(this, "STH") + ";}</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "STH", cbReference, false);
}
前台通过HTML按钮来执行脚本: <asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div>
<input id="btnSthPostBack" type="button" value="STH" onclick="javascript:OnSthCreated();" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
竟然整个页面都刷新了
问题是,我如果用IPostBackEventHandler的话,竟然无视UpdatePanel,整个页面都给刷新了!而如果用ICallbackEventHandler,则没有把前台asp:HiddenField的值回传,导致在后台响应事件是获取不到。
而事件响应方法void RaiseCallbackEvent(string eventArgument)本身也只有一个参数可用,这个参数一般用以判断是谁发的。另外脚本函数CallServer(arg, context)其中有一个context,不知道能否在后台获取得到值?
下面的已测试
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript">
function postServer(){
document.getElementById("HiddenField1").value="csdn";
var hid = document.getElementById("HiddenField1").value;
<%=ClientScript.GetCallbackEventReference(this, "hid", "acceptServer", null) %>
}
function acceptServer(arg){
alert(arg);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HiddenField ID="HiddenField1" runat="server" />
<input id="Button1" onclick="postServer()" type="button" value="回传" />
</div>
</form>
</body>
</html>public partial class Callback2 : System.Web.UI.Page, ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{ } public string arg;
public string GetCallbackResult()
{
return arg;
} public void RaiseCallbackEvent(string eventArgument)
{
arg = eventArgument + ":huangwenquan123";
}
}
你在后台仍然是获取不到 HiddenField1.Value 的值,只是通过参数eventArgument传,
而这个参数我可能另有用途
我现在的做法是通过服务器端按钮,先后执行客户端脚本和服务器端响应函数。
将按钮放入UpdatePanel里面。
script 这种调用方式的计数器,实现来路获取,是很容易的,可以用一句js来实现,但<img这样的调用方式,js不能运行,只能直接是输入图像的代码。
这时用Request.ServerVariables("HTTP_REFERER")取到的,只是计数器所在的网页的网址,如何才能获取到计数器所在的网页的来源地址呢?问题补充: 比如在看 http://www.ddd.com/ 时转到了看 http://www.abc.com/index.html 页,这页里用 <img src="xxx.asp" /> 引用了计数器,那么在xxx.asp中的HTTP_REFERER就是 http://www.abc.com/index.html,这并不是期望的 http://www.ddd.com,要的就是得到 http://www.ddd.com.
下面这样可以取到隐藏控件的值<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript">
function postServer(){
//document.getElementById("HiddenField1").value="csdn";
//var hid = document.getElementById("HiddenField1").value;
var hid="csdn";
<%=ClientScript.GetCallbackEventReference(this, "hid", "acceptServer", null) %>
}
function acceptServer(arg){
alert(arg);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HiddenField ID="HiddenField1" runat="server" />
<input id="Button1" onclick="postServer()" type="button" value="回传" />
</div>
</form>
</body>
</html>public partial class Callback2 : System.Web.UI.Page, ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
HiddenField1.Value = "床上等你";
} public string arg;
public string GetCallbackResult()
{
return arg;
}
public void RaiseCallbackEvent(string eventArgument)
{
string str = HiddenField1.Value;
arg = eventArgument + ":huangwenquan123" + str;
}
}