如何在页面加载事件中显示嵌套中继器的数据?
How to show data of nested repeaters in page load event?
我正在尝试创建一个评论回复框,我在其中使用了两个转发器,一个用于评论,另一个用于回复。两个转发器在显示数据方面都工作正常,但主要问题是当我提交对我的评论的回复时,回复 不显示 只是在单击提交按钮后。当我再次加载页面时,回复会显示在页面上。
下面是我的aspx代码
<div>
<asp:Repeater runat="server" ID="repAnswer" EnableViewState="True" OnItemDataBound="OnItemDataBound">
<ItemTemplate>
<h6>Answer</h6>
<p><%# Eval("Answer") %></p>
<asp:Label runat="server" ID="lblAnsId" Text='<%# Eval("AnsId")%>' ></asp:Label>
<a class="link" id='lnkReplyParent<%#Eval("AnsId") %>' href="javascript:void(0)" onclick="showReply(<%#Eval("AnsId") %>);return false;">Reply</a>
<a class="link" id="lnkCancle" href="javascript:void(0)" onclick="closeReply(<%#Eval("AnsId") %>);return false;">Cancle</a>
<div id='divReply<%#Eval("AnsId") %>' style="display:none;">
<asp:TextBox ID="textCommentReplyParent" CssClass="input-group" runat="server" Width="300px" TextMode="MultiLine" EnableViewState="True"></asp:TextBox>
<br />
<asp:Button ID="btnReplyParent" runat="server" Text="Reply" OnClick="btnReply_Click" /></div>
<div>
<asp:Repeater runat="server" ID="repRply">
<ItemTemplate>
<p><%# Eval("reply") %></p>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
下面是我的cs页面代码
protected void btnReply_Click(object sender, EventArgs e)
{
RepeaterItem item = (sender as Button).NamingContainer as RepeaterItem;
rplycmnt =(item.FindControl("textCommentReplyParent") as TextBox).Text.Trim();
answerid=Convert.ToInt32((item.FindControl("lblAnsId") as Label).Text);
OnlineSubjects onlinesub = new OnlineSubjects()
{
reply = rplycmnt,
AnsId = answerid
};
onlinesub.addReply();
}
//getting replies
protected void OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
answerid = Convert.ToInt32((e.Item.FindControl("lblAnsId") as Label).Text);
Repeater repRply = e.Item.FindControl("repRply") as Repeater;
OnlineSubjects onlinerply = new OnlineSubjects()
{
AnsId = answerid
};
onlinerply.showReply();
repRply.DataSource = onlinerply.showReply();
repRply.DataBind();
}
}
注释代码...
发表此评论后,我们可以回复此评论
protected void btnAnswer_Click(object sender, EventArgs e)
{
OnlineSubjects onlinesub = new OnlineSubjects()
{
Answer = txtAddAnswer.Text.Trim(),
QuesId=Id
};
onlinesub.addAnswer();
txtAddAnswer.Text = "";
GetAnswer();
}
显示评论的代码
private void GetAnswer()
{
OnlineSubjects onlineans = new OnlineSubjects()
{
QuesId = Id
};
onlineans.showAnswer();
repAnswer.DataSource = onlineans.showAnswer();
repAnswer.DataBind();
}
页面加载时
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GetAnswer();
}
}
您应该在 btnReply_Click
方法中将内部转发器重新绑定到更新后的数据源。
回复后需要调用getanswer
protected void btnReply_Click(object sender, EventArgs e)
{
RepeaterItem item = (sender as Button).NamingContainer as RepeaterItem;
rplycmnt =(item.FindControl("textCommentReplyParent") as TextBox).Text.Trim();
answerid=Convert.ToInt32((item.FindControl("lblAnsId") as Label).Text);
OnlineSubjects onlinesub = new OnlineSubjects()
{
reply = rplycmnt,
AnsId = answerid
};
onlinesub.addReply();
GetAnswer();
}
顺便说一句,你调用了两次answer,这是浪费资源。改变它如下。同时将方法名称更改为 bindsanswers,因为它绑定数据
private void BindAnswers()
{
OnlineSubjects onlineans = new OnlineSubjects()
{
QuesId = Id
};
var answers = onlineans.showAnswer();
repAnswer.DataSource = answers;
repAnswer.DataBind();
}
我正在尝试创建一个评论回复框,我在其中使用了两个转发器,一个用于评论,另一个用于回复。两个转发器在显示数据方面都工作正常,但主要问题是当我提交对我的评论的回复时,回复 不显示 只是在单击提交按钮后。当我再次加载页面时,回复会显示在页面上。
下面是我的aspx代码
<div>
<asp:Repeater runat="server" ID="repAnswer" EnableViewState="True" OnItemDataBound="OnItemDataBound">
<ItemTemplate>
<h6>Answer</h6>
<p><%# Eval("Answer") %></p>
<asp:Label runat="server" ID="lblAnsId" Text='<%# Eval("AnsId")%>' ></asp:Label>
<a class="link" id='lnkReplyParent<%#Eval("AnsId") %>' href="javascript:void(0)" onclick="showReply(<%#Eval("AnsId") %>);return false;">Reply</a>
<a class="link" id="lnkCancle" href="javascript:void(0)" onclick="closeReply(<%#Eval("AnsId") %>);return false;">Cancle</a>
<div id='divReply<%#Eval("AnsId") %>' style="display:none;">
<asp:TextBox ID="textCommentReplyParent" CssClass="input-group" runat="server" Width="300px" TextMode="MultiLine" EnableViewState="True"></asp:TextBox>
<br />
<asp:Button ID="btnReplyParent" runat="server" Text="Reply" OnClick="btnReply_Click" /></div>
<div>
<asp:Repeater runat="server" ID="repRply">
<ItemTemplate>
<p><%# Eval("reply") %></p>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
下面是我的cs页面代码
protected void btnReply_Click(object sender, EventArgs e)
{
RepeaterItem item = (sender as Button).NamingContainer as RepeaterItem;
rplycmnt =(item.FindControl("textCommentReplyParent") as TextBox).Text.Trim();
answerid=Convert.ToInt32((item.FindControl("lblAnsId") as Label).Text);
OnlineSubjects onlinesub = new OnlineSubjects()
{
reply = rplycmnt,
AnsId = answerid
};
onlinesub.addReply();
}
//getting replies
protected void OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
answerid = Convert.ToInt32((e.Item.FindControl("lblAnsId") as Label).Text);
Repeater repRply = e.Item.FindControl("repRply") as Repeater;
OnlineSubjects onlinerply = new OnlineSubjects()
{
AnsId = answerid
};
onlinerply.showReply();
repRply.DataSource = onlinerply.showReply();
repRply.DataBind();
}
}
注释代码... 发表此评论后,我们可以回复此评论
protected void btnAnswer_Click(object sender, EventArgs e)
{
OnlineSubjects onlinesub = new OnlineSubjects()
{
Answer = txtAddAnswer.Text.Trim(),
QuesId=Id
};
onlinesub.addAnswer();
txtAddAnswer.Text = "";
GetAnswer();
}
显示评论的代码
private void GetAnswer()
{
OnlineSubjects onlineans = new OnlineSubjects()
{
QuesId = Id
};
onlineans.showAnswer();
repAnswer.DataSource = onlineans.showAnswer();
repAnswer.DataBind();
}
页面加载时
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GetAnswer();
}
}
您应该在 btnReply_Click
方法中将内部转发器重新绑定到更新后的数据源。
回复后需要调用getanswer
protected void btnReply_Click(object sender, EventArgs e)
{
RepeaterItem item = (sender as Button).NamingContainer as RepeaterItem;
rplycmnt =(item.FindControl("textCommentReplyParent") as TextBox).Text.Trim();
answerid=Convert.ToInt32((item.FindControl("lblAnsId") as Label).Text);
OnlineSubjects onlinesub = new OnlineSubjects()
{
reply = rplycmnt,
AnsId = answerid
};
onlinesub.addReply();
GetAnswer();
}
顺便说一句,你调用了两次answer,这是浪费资源。改变它如下。同时将方法名称更改为 bindsanswers,因为它绑定数据
private void BindAnswers()
{
OnlineSubjects onlineans = new OnlineSubjects()
{
QuesId = Id
};
var answers = onlineans.showAnswer();
repAnswer.DataSource = answers;
repAnswer.DataBind();
}