请那位高手 用vb.net 解释以下此文章(用JavaScript脚本解决ASP.NET页面刷新问题)Not(原作)

外星人oo 2003-08-19 04:30:09
用ASP.NET开发的人对服务器端控件事件引起的页面刷新很头痛吧!

Not在此把Not在做一个项目时的解决方法拿出来与大家共享。
Not的思路是事件执行完后写段脚本,让页面自动滚动到刷新页面之前的控件处,减少页面刷新带来的不便。
比如按了一个按钮后,脚本会自动将页面自动滚动到这个按钮的位置。

写段脚本的事情Not用了一个ScriptHelper的类来搞定,这个类有个GetViewControlScript(string controlName)的方法,它返回是一段客户端的脚本,传入的参数就是这个控件的ID。

ScriptHelper类代码:

/// <summary>
/// 提供一些产生页面脚本的方法
/// </summary>
public class ScriptHelper
{

/// <summary>
/// 获取客户端查看控件的脚本
/// </summary>
/// <param name="controlName"></param>
/// <returns>脚本代码</returns>
public static string GetViewControlScript(string controlName)
{

//创建客户端函数ViewObj
string script = "\n";
script += "<script language=\"javascript\">\n";
script += "function ViewObj(objName)\n";
script += "{\n";
script += "var obj = document.all.item(objName);\n";
script += "if (obj != null)\n";
script += "{\n";
script += "\tobj.scrollIntoView();\n";
script += "\tobj.focus();\n";
script += "}\n";
script += "}\n";

//创建客户端函数ToDo
script += "function ToDo()";
script += "{\n";
script += string.Format("setTimeout(\"ViewObj('{0}')\",1000);\n", controlName);
script += "}\n";

script += "window.onload = ToDo;\n";
script += "</script>\n";

return script;
}

}

使用示例:

为了方便输入脚本,我在页面上放了个Label:lblScript,并把lblScript的EnableViewState属性和Visible属性设成False。
然后在lblScrpt的Click事件的操作代码后添加输入脚本的代码,如下所示:

private void btnSave_Click(object sender, System.EventArgs e)
{
project.UpdateProjectInfo(ds);
lblScript.Text = ScriptHelper.GetViewControlScript("btnSave");
}

在点击btnSave按钮后,页面会自动滚动到btnSave的位置,减少了页面刷新带来的不便。

...全文
82 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Meyer 2003-09-04
  • 打赏
  • 举报
回复
浏览器部分本就是javascript的天下
有Ecma的标准,
外星人oo 2003-08-20
  • 打赏
  • 举报
回复
多谢Meyer() 测试后立即结帐
暗石绿 2003-08-20
  • 打赏
  • 举报
回复
永远 ?应该是吧。
通过向web 窗体中插入javascript ???
程序先在服务器端运行,生成某些你需要的 JavaScript。然后再在客户端运行此 JavaScript
外星人oo 2003-08-20
  • 打赏
  • 举报
回复
是否asp.net 永远不支持客户端的事件,虽然通过向web 窗体中插入javascritp可以解决一些问题,但不够方便
外星人oo 2003-08-20
  • 打赏
  • 举报
回复
好,如果楼上朋友提供例子,供大家学习就更好了
mynull 2003-08-20
  • 打赏
  • 举报
回复
脚本只解决了刷新后自动滚动的功能,并不能解决刷新问题。我用过一种方法供参考:在页面中添加隐藏的iframe,激发事件时用脚本使iframe的src指向某aspx,该aspx处理后,在iframe中产生脚本,由脚本更改主页面的对应内容,这样视觉上就不存在刷屏的现象。
不过这需要支持script,并且你对DHTML编程要比较了解。
外星人oo 2003-08-20
  • 打赏
  • 举报
回复
我又整理了一下客户端代码,请看看是否正确
并请热心者帮忙注释以下,我对次懂的很少

<script language=""javascript"">
function ViewObj(objName)
{
var obj = document.all.item(objName);
if (obj != null)
{
obj.scrollIntoView();
obj.focus();
}
}


function ToDo()
{
String.Format("setTimeout("ViewObj('{0}')",1000), controlName);
}

window.onload = ToDo

</script>
Meyer 2003-08-19
  • 打赏
  • 举报
回复
搞得我狂晕!
Meyer 2003-08-19
  • 打赏
  • 举报
回复
Public Class ScriptHelper

Public Shared Function GetViewControlScript(ByVal controlName As String) As String
Dim script As String
script = vbCrLf
script += "<script language=""javascript"">" & vbCrLf
script += "function ViewObj(objName)" & vbCrLf
script += "{" & vbCrLf
script += "var obj = document.all.item(objName);" & vbCrLf
script += "if (obj != null)" & vbCrLf
script += "{" & vbCrLf
script += "obj.scrollIntoView();" & vbCrLf
script += "obj.focus();" & vbCrLf
script += "}" & vbCrLf
script += "}" & vbCrLf


script += "function ToDo()"
script += "{" & vbCrLf
script += [String].Format("setTimeout " & "(" & """ViewObj" & "(" & "'{0}')"",1000);" & vbCrLf, controlName)

script += "}" & vbCrLf

script += "window.onload = ToDo;" & vbCrLf
script += "</script>"
Return script

End Function

End Class
Meyer 2003-08-19
  • 打赏
  • 举报
回复
这段代码纯粹是构建一段脚本
外星人oo 2003-08-19
  • 打赏
  • 举报
回复
那个大侠肯帮帮忙

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧