ASP.NET 给作为隐藏域的TextBox赋值之后提交表单,无响应?
操作步骤:
给页面隐藏TextBox赋值,然后触发ASP.NET change事件,调用ASP.NET后台方法,调用后执行客户端脚本this.RegisterClientScriptBlock(DateTime.Now.ToString(), script);
执行页面的script;页面的script脚本再次给隐藏TextBox赋值,然后触发ASP.NET change事件;此时没有进入后台的ASP.NET change事件
解决方案:
将this.RegisterClientScriptBlock(DateTime.Now.ToString(), script);更改为Page.RegisterStartupScript(DateTime.Now.ToString(), script);
分析原因:
Response.Write与RegisterStartupScript与RegisterClientScriptBlock之间的区别 方法1,使用Response.Write,这种方法会把JS代码写在页面的最顶部(的前面):
System.Web.HttpContext.Current.Response.Write(" 方法2,使用RegisterStartupScript,这种方法会把JS代码嵌入在页面的底部、表单的最后 (前面),适用于要在页面控件加载完成后运行的JS代码 :
System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(),"clientScript"))
page.ClientScript.RegisterStartupScript(page.GetType(), "clientScript", " 方法3,使用RegisterClientScriptBlock,这种方法会把JS代码嵌入在页面的顶部、表单的最前 (后面),适用于要在控件加载前执行的JS代码,类似于上面的Response.Write方式 :
System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsClientScriptBlockRegistered(page.GetType(),"clientScript"))
page.ClientScript.RegisterClientScriptBlock(page.GetType(), "clientScript", "
那么,方法2和方法3之间有何不同呢?主要区别在于,RegisterStartupScript 方法是将 JavaScript 嵌入到 ASP.NET 页面的底部,恰好位于关闭元素 的前面。 RegisterClientScriptBlock 方法是将 JavaScript 嵌入到页面中开启元素 的紧后面。那么,这有何不同呢?正如我们将要看到的,这有很大的不同。
就此列举一例,以下是在页面加载到浏览器时,将焦点置于该页面上的一个文本框中的方法
- 使用利用了RegisterStartupScript 方法的 Visual Basic: Page.ClientScript.RegisterStartupScript(Me.GetType(), "Testing", _ "document.forms[0]['TextBox1'].focus();", True)
由于在浏览器运行到页面底部并执行此小段 JavaScript 时,就已生成了页面上的文本框,并已将其放到了页面中,因此,此方法运行正常。
但是,如果不按照上述方法,而编写如下代码(使用 RegisterClientScriptBlock 方法): Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Testing", _ "document.forms[0]['TextBox1'].focus();", True)
文本框控件将不会获得焦点,且会在页面上生成一个 JavaScript 错误 因为RegisterClientScriptBlock与RegisterStartupScript注册的脚本的位置不同,导致两者使用的场合也有所不同:
1> RegisterClientScriptBlock注册的脚本是在DOM元素未完全加载前执行的,这就导致了,它无法访问页面中几乎所有的html元素;
所以RegisterClientScriptBlock适合写JavaScript函数、警告(在用户点击“确定”之前,页面为空白);
2> RegisterStartupScript注册的脚本也是在DOM元素未完全加载前执行的,可是与RegisterClientScriptBlock不同的是,页面上的大部分DOM元素它都可以访问;
所以RegisterStartupScript不太适合写JavaScript函数,可能调用它写的函数的时候,函数还没加载到页面上呢;
RegisterStartupScript也可以用来写警告,此时,即使用户没有点击“确定”按钮,也可以看到页面的内容;
关于RegisterStartupScript写的警告(alert),如果< / form >后面有JavaScript脚本(直接硬编码在页面上的),且此脚本是控制页面呈现样式的,那么在用户点击警告框中的“确定”按钮前,页面的呈现可能会非预期;
处理表单数据,某个字段不符合要求时,提示:
if (string.IsNullOrEmpty(txtInput.Value.Trim())){ ClientScript.RegisterStartupScript(Page.GetType(), "", "alert('不可以为空!');", true); return;}
ASP.NET 给作为隐藏域的TextBox赋值之后提交表单,无响应?的更多相关文章
- 用超链接提交表单,实现在动态网页的url中隐藏参数
动态网页中怎么隐藏url参数传递 我们在做动态网站的时候往往会在各个页面之间传递参数,而这些参数的名称和值都会在url地址栏中被暴露出来,这样一方面不安全,另一方面也不便于搜索引擎的收录,有的时候还有 ...
- 基于ASP.Net +easyUI框架上传图片,实现图片上传,提交表单
<body> <link href="../../Easyui/themes/easyui.css" rel="stylesheet" typ ...
- jquery来跨域提交表单
说说用jquery来实现跨域提交表单 在jQuery中,我们使用json数据类型,通过getJSON方法来实现从服务端获取或发送数据,而当要向不同远程服务器端提交或者获取数据时,要采用jsonp数据类 ...
- 关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理
Web页面中经常碰到这类问题,就是客户端多次点击一个按钮或者链接,导致程序出现不可预知的麻烦. 客户就是上帝,他们也不是有意要给你的系统造成破坏,这么做的原因很大一部分是因为网络慢,点击一个操作之后, ...
- 使用jQuery实现跨域提交表单数据
我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据. 在jQue ...
- Ajax 跨域提交表单
跨域提交表单,前端ajax不用做任何修改, 只需要在后端调用的方法里面添加一行代码即可. .NET 版 HttpContext.Response.AddHeader("Access-Cont ...
- [水煮 ASP.NET Web API2 方法论](1-3)如何接收 HTML 表单请求
问题 我们想创建一个能够处理 HTML表单的 ASP.NET Web API 应用程序(使用 application/x-www-form-urlencoded 方式提交数据). 解决方案 我们可以创 ...
- asp.net动态增加服务器端控件并提交表单
为什么要用原生的呢? 1.目的 原生出现浏览器兼容性问题 极少,不用测试多浏览兼容性 .需要考虑到市面上的其他垃圾浏览器. 2.性能不好 如果不考虑第一条 你可以换一种方式 直接上代码 .aspx页面 ...
- ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)
Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...
随机推荐
- DataGrid控件使用
应用Binding显示后台数据 <UserControl x:Class="demo03.View.UserInfoList" xmlns=" ...
- Oracle 查询语句(where,order by ,like,in,distinct)
select * from production;alter table production add productionprice number(7,2); UPDATE production s ...
- CSS基础总结
CSS基础总结链接地址:http://segmentfault.com/a/1190000002773955
- 操作系统中的P,V操作(转)
无论是计算机考研.计算机软件水平考试.计算机操作系统期末考试还是其他计算机岗位考试,P.V原语操作都是一个常考点.下面笔者总结了关于P.V操作的一些知识. 信号量是最早出现的用来解决进程同步与互斥问题 ...
- 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理
题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...
- git操作
svn终结,git时代来临 git是最好的分布式版本控制系统 廖雪峰的git讲的蛮不错,http://www.liaoxuefeng.com/wiki/0013739516305929606dd183 ...
- spark 官方文档(1)——提交应用程序
Spark版本:1.6.2 spark-submit提供了在所有集群平台提交应用的统一接口,你不需要因为平台的迁移改变配置.Spark支持三种集群:Standalone.Apache Mesos和Ha ...
- Sicily 1051: 魔板(BFS+排重)
相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...
- Linux sort 命令
- 今天的收获: sort -t $'\t' 说明:sort 加-t 参数时,如果需要以 '\t' 分隔,需要写成上述形式.
- JavaBean的用法
JavaBean是一个可重复使用的软件组件,是用Java语言编写的.遵循一定标准的类. JavaBean是Java Web的重要组件,它封装了数据和操作的功能类,供JSP和Servlet调用,完成数据 ...