为什么我测试你上面代码的时候会出现“TransformationFile must be specified”
呵呵,抛砖引玉。这个功能是大家都要用到的,但是可以看到这么多人有这么多种方法,而且各有优缺点。其他讨论出一个最优的方案来。
还有一种方案:
就是不要“自己提交给自己”
可以使用@Page 页面指令 SmartNavigation Attribute

<%
@ Page language="c#" AutoEventWireup="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

<script language="C#" runat="server">
private bool _IsF5RefreshPostBack;
protected void Page_Load(object sender, EventArgs ea)

{
if (IsPostBack)

{
if (Request.Cookies["cookieTimeStamp"] != null)

{
//if (Request.Cookies["cookieTimeStamp"].Value != this.label1.Text)
//不用ViewState 使用 HiddenField 也可
if (Request.Cookies["cookieTimeStamp"].Value != (string) ViewState["vsTimeStamp"])

{
_IsF5RefreshPostBack = true;
}
}
}
string timeStamp = DateTime.Now.ToString();
//this.label1.Text = timeStamp;
ViewState["vsTimeStamp"] = timeStamp;
HttpCookie cookie = new HttpCookie("cookieTimeStamp", timeStamp);
Response.Cookies.Add(cookie);
if (_IsF5RefreshPostBack)

{
Response.Write("IsRefreshPostBack(F5) in Page Load<br>" );
}

}
void button1_Click (object sender, EventArgs ea)

{
if (_IsF5RefreshPostBack)

{
Response.Write("IsRefreshPostBack(F5) in Button Click<br>" );
}
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Button ID="button1" Text="button1" onclick="button1_Click" runat="server" />
</form>
</body>
</HTML>
通用的防止F5刷新,重复提交应该在服务器端代码控制!
结合【cookie 时间戳】与【隐藏域 时间戳】对比
我们只要把【cookie 时间戳】每次都刷新
当F5实际浏览器重复提交了上次的 【隐藏域 时间戳】
这种方案适用各种“自己提交给自己Action”的Web: PHP、ASP、JSP
--引用--------------------------------------------------
吴畏: 我不知道楼主有没有运行自己写的代码,通过清空数据来防止重复提交是行不通的,因为页面刷新是通过“ 简单”重复最新请求来实现的。换句话说,浏览器将缓存已处理的最新请求,并在用户单击页面刷新键时重新发布已处理的请求。
--------------------------------------------------------
我也发现大李提供的方法不行,页面已刷新了。
我不知道楼主有没有运行自己写的代码,通过清空数据来防止重复提交是行不通的,因为页面刷新是通过“ 简单”重复最新请求来实现的。换句话说,浏览器将缓存已处理的最新请求,并在用户单击页面刷新键时重新发布已处理的请求。
@文炽城
您这样说就不太好了,我感觉只要是自己的心得体会就行了。
<asp:Button ID="btnSumbit" runat="server" UseSubmitBehavior="false" OnClientClick="this.value='Sumbit';this.disabled=true; " Text="Sumbit" OnClick="btnSumbit_Click" />
有验证控件就不行了~
我是直接使用JQuery
优点:不用每个按钮增加事件
缺点:不能避免刷新
但是一般为了根本解决重复提交,记录都是有版本号的,每次保存时自增,保存时需验证版本是否一致,也能防止多用户同时提交问题。
每次按钮点击后disable掉
$(document).ready(function(){
$("input").click(function(){
$(this).attr("disabled","disabled");
});
}
#9楼 @小龙3
如果刷新又重复提交啦,
#1楼 + #4楼 结合是比较好的方案
这位老兄基本上没有用到asp.net里新增加的特性!
//.net1.1
Button1.Attributes.Add("onclick", "this.disabled=true;" + this.GetPostBackEventReference(this.Button1));
//.net 2.0以上
Button1.Attributes.Add("onclick", "this.disabled=true;" + this.ClientScript.GetPostBackEventReference(Button1, ""));
有这样的事件,可以用来处理。是真实的网页回发,比楼主的5秒要好些吧。
详细可以看我的博客:
http://www.cnblogs.com/chinafine/archive/2008/07/03/1234854.html
--引用--------------------------------------------------
大李: <asp:Button ID="btnSumbit" runat="server" UseSubmitBehavior="false" OnClientClick="this.value='Sumbit';this.disabled=true; " Text="Sumbit" OnClick="btnSumbit_Click" />
用这个方法比较好,防止多次提交。
--------------------------------------------------------
简单!可行!
--引用--------------------------------------------------
大李:
用这个方法比较好,防止多次提交。
--------------------------------------------------------
谢谢大李,你这个方法更好。
--引用--------------------------------------------------
JuzzPig: 如果是PostBack机制,这样防是远远不够的。不信,你提交后刷新页面试试。
--------------------------------------------------------
谢谢,PostBack后就可以进入服务端代码的控制中了,我这个范例中要求关键项必须填写才可以通过,在服务端处理并返回新的页面前可以通过清除关键输入项来使得刷新也无法进行后续处理。
--引用--------------------------------------------------
amingo: function mykeydown()
24 {
25 if(event.keyCode==116) //屏蔽F5刷新键
26 {
27 window.event.keyCode=0;
28 return false;
29 }
30 }
如果不能屏蔽菜单栏或反键中的刷新,有何意义?
--------------------------------------------------------
谢谢,我的这个代码主要还是防止操作人员误操作。
function mykeydown()
24 {
25 if(event.keyCode==116) //屏蔽F5刷新键
26 {
27 window.event.keyCode=0;
28 return false;
29 }
30 }
如果不能屏蔽菜单栏或反键中的刷新,有何意义?
如果是PostBack机制,这样防是远远不够的。不信,你提交后刷新页面试试。
不错,我AJAX的时候,disable 在传出数据则 true 回调完成之后才 false.刷新,刷新后 input 自然是空值,提交数据前肯定要检测的,空值就传不上数据了。
<asp:Button ID="btnSumbit" runat="server" UseSubmitBehavior="false" OnClientClick="this.value='Sumbit';this.disabled=true; " Text="Sumbit" OnClick="btnSumbit_Click" />
用这个方法比较好,防止多次提交。
为什么我测试你上面代码的时候会出现“TransformationFile must be specified”
<!--#INCLUDE VIRTUAL="meizzDate.js"-->
分析器错误
re: C# 画圆角矩形 梁某人 2008-05-12 00:05
看看
你这个vs2005是什么版本,为什么我的VS2005菜单中没有设备仿真器管理器
,只有一个连接到设备.
我按照楼主的代码,无论如何都得不到数据,DBGrid只有空的表头
re: [ASP.NET]制作一个简单的多页Tab功能 MS有做得很好的tab控件 2008-04-01 10:08
@Michael_z
MS有做得很好的tab控件?我没有找到啊?
re: ASP.NET优秀博客搜集 冰郁鲤 2008-01-20 15:51
我喜欢你的网站
RIO.HTTPWebNode.UseUTF8InHeader := 'UTF-8';
这句错了吧?
应该是RIO.HTTPWebNode.UseUTF8InHeader := True;才对
非常感谢这位仁兄提供的代码。我先用这段代码做了个转换成wav文件,然后播放的东西。后来在
http://www.almico.com/delphi/找到一个控件,利用TEnhWaveOut配合这段代码,可以直接播放vox文件。 另外Dialogic网站上也有直接播放vox的工具,可以去下载
http://www.acarda.com/vox-player.htm
我现在做的是一个J2EE应用,需要将自动录音系统录下来的.vox录音文件在页面上播放,在网上搜了下资料,需要将这种格式转换,我对这方面不太了解,找到你写的这段代码让我看到了希望,但我又不懂Delphi,我想能不能把这段代码做成动态链接库,我在java里面调用?我可以用jni实现!
我也是参考了网上能找到不多的一点资料(来自于Intel的一篇),你自己搜索一下吧,我自己觉得上面列举的算法也没有包括全部的算法集合,但也实在没办法了,如果朋友们实在需要,我建议可以去购买国外一些现成的算法库。
非常感谢你公开这个类。
可我实在看不懂Delphi,尤其decode那里没看明白。
能不能详细讲一下VOX文件格式,和转换公式。
或者将有关资料e-mail给我,marine8086@163.com。万分感谢!
可以把源码发到我的邮箱吗?qkrs@163.com
不好意思,刚才电脑比较慢,点的时候就出现这样的问题了,抱歉啊,不是有意罐水的!
请教一个问题,怎么安装Windows CE .NET Utilities v1.1 for Visual Studio .NET 2003啊?
我安装的时候提示错误,说什么“could not access network location compactframework SDK\WinCE Utilities”我是装了compactframework SDK2.0的呀?没找到什么原因,是不是还需要安装什么组件?
谢谢
发到我邮件吧,拜托
pinery2003@163.com
ysl@komec.com.cn
我说的拷贝到项目目录的意思就是指拷贝到你生成的exe文件所在目录中,OPENNETCF,你可以上其网站看看
当你的系统中有Framework 1.1以及FrameWork 2.0时,加载dll会有问题
是啊,我引用OPENNEETCF的一个DLL后还有好多错误,
您说的拷贝到项目目录中指的什么,能指教下吗
我不太会用OPENNEETCF
我的QQ: 105521915