2012-10-14 73 views
0

後,我試圖與輸入字段創建一些控制和提交按鈕。當我把這個控件放在一個頁面上併爲事件設置處理程序時,它只會在第一次點擊提交按鈕時觸發一次。但是,當我第二次單擊該按鈕時,RaisePostBackEvent不會觸發。我做錯了什麼?RaisePostBackEvent不觸發第二次LoadControlState的

public class AuthControl : Control, IPostBackEventHandler 
{ 
    public int FailCount { get; set; } 

    public AuthControl() 
    { 
    } 

    public string LoginKey { get { return "login"; }} 

    public string PasswordKey { get { return "password"; } } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     // <div> 
     writer.AddAttribute(HtmlTextWriterAttribute.Class, "field"); 
     writer.RenderBeginTag(HtmlTextWriterTag.Div); 

     // <input type="text" name="login" placeholder="login" /> 
     writer.AddAttribute(HtmlTextWriterAttribute.Type, "text"); 
     writer.AddAttribute(HtmlTextWriterAttribute.Name, LoginKey); 
     writer.AddAttribute(HtmlTextWriterAttribute.Value, Page.Request.Form[LoginKey]); 
     writer.AddAttribute("placeholder", LoginKey); 
     writer.RenderBeginTag(HtmlTextWriterTag.Input); 
     writer.RenderEndTag(); 

     // </div> 
     writer.RenderEndTag(); 

     // <div> 
     writer.AddAttribute(HtmlTextWriterAttribute.Class, "field"); 
     writer.RenderBeginTag(HtmlTextWriterTag.Div); 

     // <input type="password" name="password" placeholder="password" /> 
     writer.AddAttribute(HtmlTextWriterAttribute.Type, "password"); 
     writer.AddAttribute(HtmlTextWriterAttribute.Name, PasswordKey); 
     writer.AddAttribute(HtmlTextWriterAttribute.Value, Page.Request.Form[PasswordKey]); 
     writer.AddAttribute("placeholder", PasswordKey); 
     writer.RenderBeginTag(HtmlTextWriterTag.Input); 
     writer.RenderEndTag(); 

     // </div> 
     writer.RenderEndTag(); 

     // <div> 
     writer.RenderBeginTag(HtmlTextWriterTag.Div); 

     // <input type="submit" /> 
     writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID); 
     writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit"); 
     writer.AddAttribute(HtmlTextWriterAttribute.Value, "Authorize"); 

     // </div> 
     writer.RenderEndTag(); 

     if (FailCount > 0) 
     { 
      // <div> 
      writer.RenderBeginTag(HtmlTextWriterTag.Div); 

      // <span> 
      writer.RenderBeginTag(HtmlTextWriterTag.Span); 
      writer.Write("Осталось попыток: {0}", 3 - FailCount); 

      // </span> 
      writer.RenderEndTag(); 

      // </div> 
      writer.RenderEndTag(); 
     } 

     base.Render(writer); 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     Page.RegisterRequiresControlState(this); 
     base.OnInit(e); 
    } 

    protected override object SaveControlState() 
    { 
     object baseState = base.SaveControlState(); 

     object currentState = new Pair(baseState, FailCount); 

     return currentState; 
    } 

    protected override void LoadControlState(object savedState) 
    { 
     var stateLastRequest = (Pair)savedState; 

     base.LoadControlState(stateLastRequest.First); 

     FailCount = (int)stateLastRequest.Second + 1; 
    } 

    public event OnClickEventHandler Click; 

    public void RaisePostBackEvent(string eventArgument) 
    { 
     if (Click != null) 
     { 
      Click(this, EventArgs.Empty); 
     } 
    } 
} 
+0

你能後的代碼顯示在您設定的'Click'事件處理的位? –

+0

對不起,這個問題是我的疏忽。 – Boo

+0

高興你得到它整理出來。 –

回答

0

對不起,這是我的錯。在哪裏加控制的還有另外一個按鈕,然後在Render方法提交按鈕沒有被添加的頁面(我不添加writer.RenderBeginTag(HtmlTextWriterTag.Input); writer.RenderEndTag();。這就是爲什麼我點擊的控制不是火災另一個按鈕和事件。