今天先来解决一下昨天留下的问题。
首先是“
只能提交一次的按钮”,在ff中
history.back()后按钮仍然是disabled状态。这个问了很久都没有答案,于是自己试啊试,发现在ff中history.back(),页面不会执行onload,即停留在最后提交的状态,而ie会在history.back()后执行onload,但这是浏览器的问题,估计也没办法。垂死挣扎,正要放弃之际,突然发现成功了,立即看看是哪里问题。最好发现,如果在页面中写一个onunload的函数,即使是空的,只要不是null,那么ff在history.back()之后就会执行onload。太好了!虽然是误打误撞,也不知道为什么,反正是解决了,于是修改如下:
/**/
/// <summary> /// 只能提交一次的按钮 /// </summary>
public
class
ButtonSubmitOnce : Button
{ private string _textonclick = "处理中,请稍后。。。"; private string _clientcheck; protected override void Render(HtmlTextWriter writer) { StringBuilder temp = new StringBuilder(); temp.Append(this.OnClientClick); if (!string.IsNullOrEmpty(_clientcheck)) temp.Append("if(!").Append(_clientcheck).Append(") return false;"); if (!string.IsNullOrEmpty(_textonclick)) temp.Append("this.value=\"").Append(_textonclick).Append("\";"); //this is for the ff temp.Append("if(null==window.onunload) window.onunload = function(){};"); temp.Append("this.disabled = true;").Append(Page.GetPostBackEventReference(this)); this.OnClientClick = temp.ToString(); base.Render(writer); } public string TextOnClick { set { _textonclick = value; } } public string ClientCheck { set { _clientcheck = value; } } }
测试也通过,太好了,先解决了一个问题。
接下来是多个提交按钮时设置默认提交按钮的问题。baidu了一下,发现用DefaultButton可以设置默认提交按钮。于是使用并查看代码,发现ms是用一个WebForm_FireDefaultButton这样的js来修改默认提交按钮的。又baidu一下,发现可以直接在客户端调用这个函数,先试一下,真的可以。于是修改“能定义默认提交按钮的TextBox”如下:
/**/
/// <summary> /// 能定义默认提交按钮的TextBox /// </summary>
public
class
TextBoxSubmit : TextBox
{ private Button _buttonsubmit; protected override void Render(HtmlTextWriter writer) { if (_buttonsubmit != null) { this.Attributes["onkeypress"] += "return WebForm_FireDefaultButton(event, '" + _buttonsubmit.ClientID + "');"; } base.Render(writer); } public Button ButtonSubmit { set { _buttonsubmit = value; } } }
再测试,奇怪,怎么又不可以了。打开源码一看,没什么问题啊。对比一下刚才成功的代码,发现少了WebResource.axd 这个文件的调用。奇怪怎么刚才就有,现在就没了。在找一下原因,原来刚才我使用了DefaultButton,这样才会自动调用这个文件,但我是自己定义的,系统不知道我需要这个文件。于是到网上找一下怎么手动调用这个文件,但没找到,郁闷,只好设一个DefaultButton装一下样子啦,希望以后能找到方法。经过测试,通过!终于解决了两座大山。
接下来做一下会员信息显示的页面吧,其实现在也没什么信息可显示的。
再整理一下,明天继续吧。
转载于:https://www.cnblogs.com/cloudgamer/archive/2008/01/25/1052265.html