动态创建的内容正在更新按钮点击“后退一步”

时间:2013-08-03 02:03:56

标签: c# asp.net button insert-update

所以我正在创建一个简单的问题/答案格式,并在提交答案时遇到问题。我通过“RenderQuestions()”函数从数据库动态创建div / buttons / textbox。这将创建一个问题列表并回答文本框/按钮。在尝试回答问题时,我输入答案点击提交,没有任何反应。我再次这样做,它显示了我的第一个答案。这是一个“落后”..如果我刷新它然后显示所有应答的答案。我整晚都在苦苦挣扎。这是一些代码:

-----My page load----- (Relevant parts)

protected void Page_Load(object sender, EventArgs e) 
{
    //If authenticated hide login & show welcome bloc
    if (User.Identity.IsAuthenticated)
    {

        //Show question & render
        questionsBloc.Visible = true;
        //if(Page.IsPostBack)
        RenderQuestions();

    }

-----RenderQuestions() function---- (The relevant parts)

        //Initialize & get answers
        List<Answer> answers = new List<Answer>();
        answers = um.GetAnswers(q.QuestionID);

        //Initialize html render
        HtmlGenericControl questionDiv = new HtmlGenericControl("div");
        TextBox txtAnswer = new TextBox();
        Button btnAnswer = new Button();

        //Set Answer Button
        btnAnswer.Text = "Answer";
        btnAnswer.Click += new EventHandler(btnAnswer_Click);

        //Set ID's 
        btnAnswer.ID = "btnAnswer" + q.QuestionID.ToString();
        questionDiv.ID = "questionDiv" + q.QuestionID.ToString(); 

        //Set classes
        questionDiv.Attributes.Add("class", "questionBloc");
        btnAnswer.CausesValidation = false;
        btnAnswer.EnableViewState = false;
        //btnAnswer.UseSubmitBehavior = true;



        //Fill inner text with question
        questionDiv.InnerText = q.QuestionContent; //Insert question..
        //actionDiv.InnerText = "Like/Dislike/Comment/Flag"; //Insert answer..

        //Add answer textbox and button to action div
        actionDiv.Controls.Add(btnAnswer);

        //Add question div to qaDiv
        qaDiv.Controls.Add(questionDiv);


        //Add action div to qaDiv
        qaDiv.Controls.Add(actionDiv);

        //Add all controls to feedbloc
        feedBloc.Controls.Add(qaDiv);

-----My btnAnswer event handler -----

private void btnAnswer_Click(object sender, EventArgs e)
{

    UserManager um = new UserManager();

    um.PostAnswer("My first answer!");
    //RenderGlobalFeed();

}

这是我对按钮的每次引用..我应该在page_init中初始化btn click事件吗?非常感谢任何帮助。

谢谢你们

2 个答案:

答案 0 :(得分:0)

在btnAnswer上设置AutoPostBack = true。它不会触发服务器按下按钮。

答案 1 :(得分:0)

如果要触发事件btnAnswer_Click,则必须呈现相同的内容并在每个页面加载中分配eventHandler(即,在客户端按钮单击后必须再次呈现按钮并且EventHandler必须为分配)。

如果在页面加载中找不到控件,Asp.net将不会触发该事件。 请记住,点击按钮后,首先会触发页面加载事件,然后才会触发Click_event。

必须在RenderQuestions()活动中调用btnAnswer_Click这样可以避免退步问题。

在这种情况下,我建议您了解asp.net中的ajax(使用jQuery库)请求(使用WebMethods或webservices)以避免这些回发。