避免使用相同ID的控件

时间:2017-07-10 13:31:12

标签: c# asp.net

我正在创建动态控件,以相同的动态名称和ID分配它,但是当我点击按钮“A”然后点击按钮“B”然后再次点击按钮“A”时,这会给我一个错误

  

找到了具有相同ID的多个控件。 FindControl要求控件具有唯一ID。

这是我的代码以及我如何避免重复我

protected void DynamicButton() 
{

    //BAD TOOLS INTO THE LIST AND SHOW
    List.ListUsers listsArea = new List.ListUsers();
    List<Data.Area> Area = listsArea.AreaList();

    List<Data.Area> ListOfEquiposNoOk = Area.Where(x => x.AREA == "ENG" && x.STANDBY == 1).ToList();

    List<Button> BotonesBad = new List<Button>();

    var TeamBad = ListOfEquiposNoOk.Select(x => x.TEAM).Distinct().ToList();
    foreach (var team in TeamBad)
    {
        Button newButtonBad = new Button();
        if (newButtonBad.ID != newButtonBad.ID)
        {
            BotonesBad = Bad.Controls.OfType<Button>().ToList();
            BotonesBad.Add(newButtonBad);
        }
        else
        {
            newButtonBad.CommandName = "Btn" + Convert.ToString(team);
            newButtonBad.ID = "BtnB_" + Convert.ToString(team);
            newButtonBad.Text = team;
            newButtonBad.CommandArgument = "ENG";
            newButtonBad.Click += new EventHandler(newButton_Click);

            Bad.Controls.Add(newButtonBad);
            newButtonBad.Click += new EventHandler(newButton_Click);

            newButtonBad.CssClass = "btn-primary outline separate";
        }
    }

我需要ID才能触发UpdatePanel

ADDED

public partial class Dashboard : System.Web.UI.Page
    {
        static bool enableGood = false;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DynamicButton();
            }
            else if(enableGood)
            {
                DynamicButton();
            }
        }

        protected void DButton(object sender, EventArgs e)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "showAndHide();", true);

            enableGood = true;
            DynamicButton();
        }

1 个答案:

答案 0 :(得分:0)

假设“团队”是此行中的一个对象:

newButtonBad.ID = "BtnB_" + Convert.ToString(team);

可能有你的问题。 “.ToString()”通常将类型作为字符串返回。所以每个按钮都会得到相同的名称(因为它们都是“团队”类型)。

您可以在团队对象中覆盖ToString(),或使用特定的团队属性(例如team.ID)。你可以使用这样的属性:

newButtonBad.ID = "BtnB_" + team.ID.ToString();

正如评论中已经指出的那样,从

更改您的评估
if (newButtonBad.ID != newButtonBad.ID)

if (team.ID != newButtonBad.ID)

这应该可以解决问题。