【发布时间】:2015-08-20 04:29:44
【问题描述】:
我正在使用 ASP.NET Webforms 和 C# 做一个轮询 Web 应用程序。根据存储在对象中的答案数量,我想在 C# 中以这种格式在页面上的 div 预设中显示相同数量的进度 div。
<div class="pull-left">
<asp:RadioButton ID="RadioButton1" runat="server" Text="AnswerOption" />
</div>
<div class="progress progress-striped active">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="Val" aria-valuemin="0" aria-valuemax="100" style="width: Val">
<b>Val</b>
</div>
</div>
我尝试了下面的方法,但我看到的只是一个 div,而不是与对象中答案的数量相同的 div。这就是我所做的:
for (int i = 0; i < lstValues.Count; i++)
{
var answer = UtilityClass.Utility.SubstringElement(lstValues[i]);
if (answer.Trim() == new PollAnswersService().GetByPollAnswerId(userResp.PollAnswerId).PollAnswerText)
{
ListItem valItem = new ListItem(lstValues[i], lstValues[i]);
var divResults = ((HtmlGenericControl)e.Item.FindControl("divResults"));
divResults.Controls.Add(new LiteralControl("<br />"));
string percentage = lstValues[i].Substring(lstValues[i].IndexOf("-") + 1);
var percentVal = percentage.Remove(percentage.Length - 1).Trim();
RadioButton rb = new RadioButton();
rb.Text = lstValues[i];
rb.Checked = true;
rb.Enabled = false;
divResults.Controls.Add(rb);
Panel pnlProgress = new Panel();
pnlProgress.Attributes["class"] = "progress-bar progress-bar-info";
pnlProgress.Attributes["role"] = "progressbar";
pnlProgress.Attributes["aria-valuenow"] = percentVal;
pnlProgress.Attributes["aria-valuemin"] = "0";
pnlProgress.Attributes["aria-valuemax"] = "100";
pnlProgress.Style["width"] = string.Format("{0}%;", percentVal);
pnlProgress.Controls.Add(new LiteralControl(string.Format("{0}%;", percentVal)));
divResults.Controls.Add(pnlProgress);
}
else
{
ListItem valItem = new ListItem(lstValues[i], lstValues[i]);
((RadioButtonList)e.Item.FindControl("rblPollResult")).Items.Add(valItem);
var divResults = ((HtmlGenericControl)e.Item.FindControl("divResults"));
divResults.Controls.Add(new LiteralControl("<br />"));
string percentage = lstValues[i].Substring(lstValues[i].IndexOf("-") + 1);
var percentVal = percentage.Remove(percentage.Length - 1).Trim();
RadioButton rb = new RadioButton();
rb.Text = lstValues[i];
rb.Checked = true;
rb.Enabled = false;
//divResults.Controls.Add(rb);
Panel pnlProgress = new Panel();
pnlProgress.Attributes["class"] = "progress-bar progress-bar-info";
pnlProgress.Attributes["role"] = "progressbar";
pnlProgress.Attributes["aria-valuenow"] = percentVal;
pnlProgress.Attributes["aria-valuemin"] = "0";
pnlProgress.Attributes["aria-valuemax"] = "100";
pnlProgress.Style["width"] = string.Format("{0}%;", percentVal);
pnlProgress.Controls.Add(new LiteralControl(string.Format("{0}%;", percentVal)));
divResults.Controls.Add(pnlProgress);
}
}
【问题讨论】:
-
我认为它是在流程结束时添加到 HTML 的迭代中的最后一项是否正确?
-
@Derek 我相信是的。有可能的。但我不知道为什么,因为它处于循环中。
-
您需要调试代码,并检查 divResults 控件在循环的最后一次迭代中具有的子控件的数量。我希望你像这样的 asp ListView 控件。
-
@Derek 它只显示一个控件。这意味着随着循环的进行,子控件将被替换。你有更好的方法来做到这一点,因为我相信你明白我想要实现的目标。谢谢