【问题标题】:How to add multiple progress divs to a div based on a List<T> object items如何基于 List<T> 对象项将多个进度 div 添加到 div
【发布时间】: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 它只显示一个控件。这意味着随着循环的进行,子控件将被替换。你有更好的方法来做到这一点,因为我相信你明白我想要实现的目标。谢谢

标签: c# html asp.net webforms


【解决方案1】:

我认为答案可能很简单,在循环之外声明这个变量:-

var divResults = ((HtmlGenericControl)e.Item.FindControl("divResults"));

for (int i = 0; i < lstValues.Count; i++){

// Your Code Here

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多