所以我正在创建一个简单的问题/答案格式,并在提交答案时遇到问题。我通过“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事件吗?非常感谢任何帮助。
谢谢你们
答案 0 :(得分:0)
在btnAnswer上设置AutoPostBack = true。它不会触发服务器按下按钮。
答案 1 :(得分:0)
如果要触发事件btnAnswer_Click
,则必须呈现相同的内容并在每个页面加载中分配eventHandler(即,在客户端按钮单击后必须再次呈现按钮并且EventHandler必须为分配)。
如果在页面加载中找不到控件,Asp.net将不会触发该事件。 请记住,点击按钮后,首先会触发页面加载事件,然后才会触发Click_event。
必须在RenderQuestions()
活动中调用btnAnswer_Click
。这样可以避免退步问题。
在这种情况下,我建议您了解asp.net中的ajax(使用jQuery库)请求(使用WebMethods或webservices)以避免这些回发。