C# “动态创建的内容正在更新”;“落后一步”;点击按钮
因此,我创建了一个简单的问题/答案格式,在提交答案时遇到了问题。我通过“RenderQuestions()”函数从数据库中动态创建div/buttons/textbox。这将创建问题和答案文本框/按钮的列表。当我试图回答一个问题时,我键入我的答案,然后单击提交,结果什么也没有发生。我再做一次,它显示了我的第一个答案。这是“落后一步”。。如果我刷新它,它会显示所有应该显示的答案。我整晚都在为这件事挣扎。下面是一些代码:C# “动态创建的内容正在更新”;“落后一步”;点击按钮,c#,asp.net,button,insert-update,C#,Asp.net,Button,Insert Update,因此,我创建了一个简单的问题/答案格式,在提交答案时遇到了问题。我通过“RenderQuestions()”函数从数据库中动态创建div/buttons/textbox。这将创建问题和答案文本框/按钮的列表。当我试图回答一个问题时,我键入我的答案,然后单击提交,结果什么也没有发生。我再做一次,它显示了我的第一个答案。这是“落后一步”。。如果我刷新它,它会显示所有应该显示的答案。我整晚都在为这件事挣扎。下面是一些代码: -----My page load----- (Relevant parts)
-----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();
}
----我的页面加载---(相关部分)
受保护的无效页面加载(对象发送方、事件参数e)
{
//如果经过身份验证,则隐藏登录并显示欢迎区
if(User.Identity.IsAuthenticated)
{
//显示问题并呈现
问题位置可见=正确;
//如果(第IsPostBack页)
RenderQuestions();
}
-----RenderQuestions()函数---(相关部分)
//初始化并获取答案
列表答案=新列表();
答案=um.GetAnswers(q.QuestionID);
//初始化html呈现
HtmlGenericControl问题div=新的HtmlGenericControl(“div”);
TextBox txtAnswer=新建TextBox();
按钮btnAnswer=新按钮();
//设置应答按钮
btnAnswer.Text=“答案”;
单击+=新建事件处理程序(单击);
//设置ID
btnAnswer.ID=“btnAnswer”+q.QuestionID.ToString();
questionDiv.ID=“questionDiv”+q.QuestionID.ToString();
//定级
添加(“类”、“问题组”);
btnAnswer.CausesValidation=false;
btnAnswer.EnableViewState=false;
//btnAnswer.UseSubmitBehavior=true;
//用问题填充内部文本
questionDiv.InnerText=q.QuestionContent;//插入问题。。
//actionDiv.InnerText=“喜欢/不喜欢/评论/标志”;//插入答案。。
//将应答文本框和按钮添加到操作div
actionDiv.Controls.Add(btnAnswer);
//将问题div添加到qaDiv
qaDiv.Controls.Add(questionDiv);
//将action div添加到qaDiv
qaDiv.Controls.Add(actionDiv);
//将所有控件添加到feedbloc
feedBloc.Controls.Add(qaDiv);
-----我的btnAnswer事件处理程序-----
私有无效Btnaswer_单击(对象发送者,事件参数e)
{
UserManager um=newusermanager();
邮递解答(“我的第一个答案!”);
//RenderGlobalFeed();
}
这是对我的按钮的所有引用。我应该在我的页面初始化btn点击事件吗?非常感谢任何帮助
谢谢各位,在btnAnswer上设置AutoPostBack=true。它不会触发服务器对按钮单击进行操作。如果您想触发事件
btnAnswer\u单击
,则必须在每个页面加载中呈现相同的内容并分配事件处理程序(即,客户端按钮单击后的页面加载必须再次呈现该按钮,并且必须指定EventHandler)
如果Asp.net在页面加载中找不到控件,则不会触发该事件。请记住,单击按钮后,页面加载事件将首先触发,然后仅触发单击事件。
也必须在btnAnswer\u Click
事件中调用RenderQuestions()
。这将避免后退问题
在这种情况下,我建议您了解asp.net中的ajax(使用jQuery库)请求(使用WebMethods或webservices)以避免这些回发。如何在代码隐藏中做到这一点?将回发URL设置为重定向页面?它会触发事件..但它会先触发RenderQuestions()。我如何重新排序??