我来做百科(第八天)

今天先来解决一下昨天留下的问题。

首先是“只能提交一次的按钮”,在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装一下样子啦,希望以后能找到方法。经过测试,通过!终于解决了两座大山。

接下来做一下会员信息显示的页面吧,其实现在也没什么信息可显示的。
 

再整理一下,明天继续吧。
posted @ 2008-01-25 05:40  cloudgamer  阅读(848)  评论(0编辑  收藏  举报