C# 按钮单击事件未触发并给出错误

C# 按钮单击事件未触发并给出错误,c#,asp.net,C#,Asp.net,我需要关于我的代码的指导 public class FacultyTemplatedynamic:ITemplate { ListItemType ItemType; string FieldName; string InfoType; private bool isEditMode = false; protected bool isInEditMode { get { return this.isEditMode; }

我需要关于我的代码的指导

 public class FacultyTemplatedynamic:ITemplate
{
    ListItemType ItemType;
    string FieldName;
    string InfoType;
    private bool isEditMode = false;
    protected bool isInEditMode
    {
        get { return this.isEditMode; }
        set { this.isEditMode = value; }
    }
    public FacultyTemplatedynamic(ListItemType itemType, string field_name, string info_type)
    {
        FieldName = field_name;
        ItemType = itemType;
        InfoType = info_type;
    }

    public void InstantiateIn(Control container)
    {
        switch (ItemType)
        {
            case ListItemType.Header:
                Literal header_litrl = new Literal();
                header_litrl.Text = "<b>" + FieldName + "</b>";
                container.Controls.Add(header_litrl);
                break;
            case ListItemType.Item:
                switch (InfoType)
                {
                    case "Command":
                        ImageButton edit_button = new ImageButton();
                        edit_button.ID = "edit_button";
                        edit_button.ImageUrl = "~/Images/edit.gif";
                        edit_button.CommandName = "Edit";
                        edit_button.ToolTip = "Edit";
                        container.Controls.Add(edit_button);
                        break;
                    default:
                        Label field_lbl = new Label();
                        field_lbl.ID = "labelName";
                        //field_lbl.Visible =!(bool) isInEditMode;
                        field_lbl.Text = String.Empty; //we will bind it later through 'OnDataBinding' event
                        field_lbl.DataBinding += new EventHandler(OnDataBinding);
                        container.Controls.Add(field_lbl);
                        break;
                }
                break;
            case ListItemType.EditItem:
                if (InfoType == "Command")
                {
                    ImageButton update_button = new ImageButton();
                    update_button.ID = "update_button";
                    update_button.CommandName = "Update";
                    update_button.ImageUrl = "~/Images/update.gif";

                    update_button.ToolTip = "Update";
                    update_button.OnClientClick = "return confirm('Are you sure to update the record?')";
                    container.Controls.Add(update_button);

                    ImageButton cancel_button = new ImageButton();
                    cancel_button.ImageUrl = "~/Images/cancel.gif";
                    cancel_button.ID = "cancel_button";
                    cancel_button.CommandName = "Cancel";
                    cancel_button.ToolTip = "Cancel";
                    container.Controls.Add(cancel_button);

                }
                else// for other 'non-command' i.e. the key and non key fields, bind textboxes with corresponding field values
                {
                    Label field_lbl1 = new Label();
                    field_lbl1.ID = "LabelEdit";
                    //field_lbl1.Visible = (bool)isInEditMode;
                    field_lbl1.Text = String.Empty; //we will bind it later through 'OnDataBinding' event
                    field_lbl1.DataBinding += new EventHandler(OnDataBinding);
                    container.Controls.Add(field_lbl1);
                }
                break;
        }
    }

    private void OnDataBinding(object sender, EventArgs e)
    {
        object bound_value_obj = null;
        Control ctrl = (Control)sender;
        IDataItemContainer data_item_container = (IDataItemContainer)ctrl.NamingContainer;
        bound_value_obj = DataBinder.Eval(data_item_container.DataItem, FieldName);

        switch (ItemType)
        {
            case ListItemType.Item:
                Label field_ltrl = (Label)sender;
                field_ltrl.Text = bound_value_obj.ToString();

                break;
            case ListItemType.EditItem:
                TextBox field_txtbox = (TextBox)sender;
                field_txtbox.Text = bound_value_obj.ToString();

                break;
        }
    }
}




 private void CreateTemplatedGridView()
        {
            PopulateTable();
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                TemplateField tf = new TemplateField();
                tf.HeaderTemplate = new FacultyTemplatedynamic(ListItemType.Header, dt.Columns[i].ColumnName, dt.Columns[i].DataType.Name);
                tf.ItemTemplate = new FacultyTemplatedynamic(ListItemType.Item, dt.Columns[i].ColumnName, dt.Columns[i].DataType.Name);
                tf.EditItemTemplate = new FacultyTemplatedynamic(ListItemType.EditItem, dt.Columns[i].ColumnName, dt.Columns[i].DataType.Name);
                GrdMarkAttendance.Columns.Add(tf);
            }
            TemplateField tf1 = new TemplateField();
            GrdMarkAttendance.Columns.Add(tf1);
            GrdMarkAttendance.DataSource = dt;
            GrdMarkAttendance.DataBind();
        }

     private void PopulateTable()
        {
            dt = new DataTable();
            dt = obj.GetRegister();
        }    

     protected void GrdMarkAttendance_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            PopulateTable();
            int i = dt.Columns.Count;          
            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                DropDownList ddl = new DropDownList();
                ddl.ID = "ddl";
                ddl.Items.Insert(0, "Present");
                ddl.Items.Insert(1, "Absent");
                ddl.Items.Insert(2, "Leave");              
                e.Row.Cells[i].Controls.Add(ddl);
            }
        }    

    protected void Button1_Click(object sender, EventArgs e)
        {

        }  
  • 我不知道昨天为什么会出现这个错误,它写得很好,但当我使用时* 在行的特定单元格中查找控件它开始给我错误,但现在我删除了*该代码,并单击按钮显示错误。*请给出您的***建议,以便我可以进一步移动

很抱歉,如果我以错误的格式发布问题或提供的数据不足

请阅读stacktrace

第一行:“找到了具有相同ID“labelName”的多个控件”

检查视图中是否有多个具有相同id的控件

编辑:


尝试Ctrl+F并搜索labelName。。如果在同一文档中找到2。。您发现了问题…

请阅读stacktrace

第一行:“找到了具有相同ID“labelName”的多个控件”

检查视图中是否有多个具有相同id的控件

编辑:



尝试Ctrl+F并搜索labelName。。如果在同一文档中找到2。。您发现了问题…

在您的页面中有两个或多个控件具有相同的id。查找该控件并为其指定不同的id

在您的页面中有两个或多个控件具有相同的id。查找该控件并为其指定不同的id

您的Web应用程序中的每个控件都应该具有唯一的id。您在哪里使用了id为“labelName”的标签,你能给我们看看gridview设计代码吗?@AmolKolekar请检查上面的代码现在我动态创建了模板字段,并以编程方式将它们添加到gridview中方法CreateTemplatedGridView()的位置和时间在页面加载事件中调用?@Mt.Schneiders Web应用程序中的每个控件都应该有一个唯一的ID。您在哪里使用了ID为“labelName”的标签,你能给我们看看gridview设计代码吗?@AmolKolekar请检查上面的代码现在我动态创建了模板字段,并以编程方式将它们添加到gridview中方法CreateTemplatedGridView()的位置和时间在页面加载事件中调用?@Mt.Schneiders感谢您的关注和建议,但我在gridview中动态创建的模板字段中使用了这个“labelName”标签。有关参考信息,请参阅createTemplatedgridview()方法。我在那里使用了这个标签名,但现在我试图读取row.cells控件。但是按钮单击事件没有被触发。我设置了断点,但这也不起作用。任何提示我没有使用anywhere Find控件。之前我使用过,但删除后,如果您不使用find控件,我会得到上述错误。你为什么不试着做一个没有ID的标签。。问题必须与添加标签部件有关。。你真的确定你的页面上没有标签或其他同名对象吗?(这也是你在代码背后制作的)你能发布aspx页面吗?谢谢你的关注和建议,但是我在gridview中动态创建的模板字段中使用了这个“labelName”标签。有关参考信息,请参阅createTemplatedgridview()方法。我在那里使用了这个标签名,但现在我试图读取row.cells控件。但是按钮单击事件没有被触发。我设置了断点,但这也不起作用。任何提示我没有使用anywhere Find控件。之前我使用过,但删除后,如果您不使用find控件,我会得到上述错误。你为什么不试着做一个没有ID的标签。。问题必须与添加标签部件有关。。你真的确定你的页面上没有标签或其他同名对象吗?(而且你在代码背后也能做到)你能发布aspx页面吗?
*[HttpException (0x80004005): Multiple controls with the same ID 'labelName' were found.* *FindControl requires that controls have unique IDs.]*
  *System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection* *controls) +265*
  *System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection*    * controls)* +311
   *System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +145*
   *System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
   *System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
   *System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
   *System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +365*
   *System.Web.UI.Page.FindControl(String id) +38*
   *System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)*  +287 
   *System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean*  *includeStagesAfterAsyncPoint) +4911*