2013-03-14 45 views
2

我遇到了我创建的动态更新面板的问题。动态添加ValidationControls到updatepanel? [ASP.NET]

问题是,我想添加一个验证程序,即RequriedFieldValidator,到我在服务器端创建的每个元素。 这上面的工作正常。 但是当我点击提交按钮时,它什么都不做。我可以在一个span元素是存在显示错误的htmlShellcode看到,但它具有“风格=”知名度=隐藏”。

我怎么解决这个问题呢?我真的不知道我在做它从一开始是(很新的编程)

MARKUP:

<asp:Panel ID="UpdatepanelWrapper" CssClass="Updatepanelwrapper" runat="server"> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:PlaceHolder runat="server" ID="WholeWrapper"> 

       <asp:PlaceHolder runat="server" ID="QuestionWrapper"> 
        <asp:PlaceHolder runat="server" ID="LabelQuestion"><asp:PlaceHolder> 
        <asp:PlaceHolder runat="server" ID="Question"></asp:PlaceHolder>       
       </asp:PlaceHolder>      
       </asp:PlaceHolder> 
      </asp:PlaceHolder> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" /> 
      <asp:AsyncPostBackTrigger ControlID="btnDelete" EventName="Click" /> 
     </Triggers> 

    </asp:UpdatePanel> 
<asp:Panel ID="ButtonPanel" CssClass="ButtonPanel" runat="server"> 
     <asp:ImageButton ID="btnDelete" runat="server" ImageUrl="~/Images/Deleteicon.png" CssClass="DeleteButton" OnClientClick="btnDelete_Click" /> 
     <asp:ImageButton ID="btnAdd" runat="server" ImageUrl="~/Images/Addicon.png" CssClass="AddButton" OnClientClick="btnAddQuestion_Click" /> 
    </asp:Panel> 
</asp:Panel> 

服务器端代码:(覆盖方法OnInit是最重要的一个)

public partial class _Default : Page 
{ 
    static int CountOfQuestions = 1; 

    private RequiredFieldValidator[] ArrRequiredFieldQuestion; 
    private Panel[] ArrWholePanel; 
    private Panel[] ArrQuestionPanel; 

    private Label[] ArrQuestionLabel; 
    private TextBox[] ArrQuestionBox; 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    private void LoadControls() 
    { 
     Control myControl = GetPostBackControl(this.Page); 

     if (myControl != null) 
     { 
      if (myControl.ID.ToString() == "btnAdd") //Ändra till btnAddQuestion om en "button" ska användas 
      { 
       CountOfQuestions++; 
      } 
      if (myControl.ID.ToString() == "btnDelete") 
      { 
       CountOfQuestions--; 
      } 

     } 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     if (!IsPostBack) 
     { 
      CountOfQuestions = 1; 
     } 
     LoadControls(); 

     ArrRequiredFieldQuestion = new RequiredFieldValidator[CountOfQuestions]; 
     ArrWholePanel = new Panel[CountOfQuestions]; 
     ArrQuestionPanel = new Panel[CountOfQuestions]; 
     ArrQuestionLabel = new Label[CountOfQuestions]; 
     ArrQuestionBox = new TextBox[CountOfQuestions]; 
     for (int i = 0; i < CountOfQuestions; i++) 
     { 
      RequiredFieldValidator ReqFieldQuestion = new RequiredFieldValidator(); 

      PlaceHolder WholeWrapper = UpdatePanel1.FindControl("WholeWrapper") as PlaceHolder; 

      Panel WholePanel = new Panel(); 
      Panel QuestionPanel = new Panel(); 

      Panel CorrectAnswerPanel = new Panel(); 

      Label QuestionLabel = new Label(); 

      TextBox Question = new TextBox(); 



      QuestionLabel.Text = "Write your question"; 

      Question.TextMode = TextBoxMode.MultiLine; 
      Question.Width = 550; 
      Question.Height = 50; 


      WholePanel.ID = "WholePanel" + i.ToString(); 
      QuestionPanel.ID = "QuestionPanel" + i.ToString(); 
      Question.ID = "tbxQuestion" + i.ToString(); 


      ReqFieldQuestion.ID = "Validate" + i.ToString(); 
      ReqFieldQuestion.ControlToValidate = "tbxQuestion" + i.ToString(); 
      ReqFieldQuestion.ValidationGroup = "QuestionGroup"; 
      ReqFieldQuestion.ErrorMessage = "Error"; 
      ReqFieldQuestion.Attributes.Add("runat", "server"); 

      QuestionPanel.CssClass = "QuestionEntry"; 

      QuestionPanel.Controls.Add(QuestionLabel); 
      QuestionPanel.Controls.Add(Question); 
      QuestionPanel.Controls.Add(ReqFieldQuestion); 

      WholeWrapper.Controls.Add(WholePanel); 
      WholePanel.Controls.Add(QuestionPanel); 


      ArrRequiredFieldQuestion[i] = ReqFieldQuestion; 

      ArrQuestionPanel[i] = QuestionPanel; 

      ArrQuestionLabel[i] = QuestionLabel; 
      ArrQuestionBox[i] = Question; 
     } 
    } 

    protected void btnAddQuestion_Click(object sender, EventArgs e) 
    { 
     //Handeld by Pre_init and LoadControls 
    } 

    protected void btnDelete_Click(object sender, EventArgs e) 
    { 
     //Handeld by Pre_init and LoadControls 
    } 


    public static Control GetPostBackControl(Page thePage) 
    {    
     Control postbackControlInstance = null; 
     if (postbackControlInstance == null) 
     { 
      for (int i = 0; i < thePage.Request.Form.Count; i++) 
      { 
       if ((thePage.Request.Form.Keys[i].EndsWith(".x")) || (thePage.Request.Form.Keys[i].EndsWith(".y"))) 
       { 
        postbackControlInstance = thePage.FindControl(thePage.Request.Form.Keys[i].Substring(0, thePage.Request.Form.Keys[i].Length - 2)); 
        return postbackControlInstance; 
       } 
      } 
     } 
     return postbackControlInstance; 
    } 
+0

_but - 我没有看到一个提交按钮 – Blachshma 2013-03-14 11:29:47

回答

2

但是,当我点击提交按钮它什么都不做。

由于我没有看到提交按钮,我猜测你是指添加和删除按钮。如果是这样的话,问题是,你所有的RequiredFieldValidatorsValidationGroup属性设置为QuestionGroup但这不是在你的任何按键的设置。

修改按钮是这样的:当我点击提交button_

<asp:ImageButton ID="btnAdd" runat="server" ValidationGroup="QuestionGroup" ... /> 
+2

哦,妈的。我想我彻底通过发布的代码。 我有一个submitbutton,只是我错过了为它添加标记码。 但ValidationGroup的解决方案解决了这个问题。 这是尴尬..我应该知道,我显然错过了添加它。 – 2013-03-14 11:37:46

+1

适合所有人:) – Blachshma 2013-03-14 11:38:47

相关问题