2013-08-03 2 views
0

Итак, я создаю простой формат вопрос/ответ и имею проблему при отправке ответа. Я динамически создаю divs/buttons/textboxs из базы данных с помощью функции RenderQuestions(). Это создает список вопросов и ответов на текстовые поля/кнопки. При попытке ответить на вопрос, я набираю свой ответ, нажимаю кнопку «Отправить», и ничего не происходит. Я делаю это снова, и это показывает мой первый ответ. Это «шаг за шагом». Если я обновляю его, он покажет все ответы, как следует. Я боролся с этим всю ночь. Вот код:Динамически созданный контент обновляет «шаг за шагом» при нажатии кнопки

-----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? Буду признателен за любую оказанную помощь.

Спасибо ребята

ответ

0

Set AutoPostBack = истинна на btnAnswer. Это не приводит к срабатыванию сервера при нажатии кнопки.

+0

Как я могу это сделать в коде? Установить PostBackURL на страницу переадресации? –

+0

Это запускает событие. Но сначала он запускает RenderQuestions(). Как я могу изменить порядок? –

0

Если вы хотите запустить событие btnAnswer_Click, вы должны отобразить его содержимое и назначить eventHandler в каждой странице (то есть загрузка страницы после нажатия кнопки клика должна снова отобразить кнопку и назначить EventHandler).

Asp.net не инициирует событие, если оно не находит элементы управления в pageload. Помните, что после нажатия кнопки сначала запускается событие загрузки страницы, а затем запускается только Click_event.

RenderQuestions() Должно быть вызвано событие btnAnswer_Click. Это позволит избежать проблемы с отступлением.

В этом случае я бы посоветовал вам узнать о запросах ajax (используя библиотеку jQuery) в asp.net (используя WebMethods или webservices), чтобы избежать этих обратных передач.

Смежные вопросы