2013-08-14 2 views
2

У меня возникла проблема с моим событием Click to Button (Кнопка изображения) Удалить. Я знаю, что есть другие вопросы по этому поводу, но я ничего не понял!Недопустимый аргумент обратной передачи или обратного вызова в ImageButton

Я не понял ответа! Я сделал все, что указывает на все остальные вопросы! Другие события на этой странице, которые делают «перенаправление», например, хороши!

Я понятен? Нужна более подробная информация? Трассировка стека или больше кода?

Ошибка:

Invalid постбэк или аргумент обратного вызова. Проверка событий разрешена с использованием в конфигурации или <% @ Страница EnableEventValidation = "true"%> на странице. В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова берутся из серверного элемента управления, который их первоначально визуализировал. Если данные действительны и ожидаются, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки.

Моя страница:

<div id="Users" align="center"> 
     <asp:Button ID="btnCreate" class="btn" Font-Bold="true" runat="server" OnClick="btnCreate_OnClick" /> 
     <br /> 
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" GridLines="None" 
      CssClass="table table-bordered table-striped" HeaderStyle-Font-Size="14px"> 
      <Columns> 
       <asp:BoundField DataField="UserName" /> 
       <asp:BoundField DataField="DisplayName" /> 
       <asp:BoundField DataField="Email" /> 
       <asp:BoundField DataField="ProfileName" /> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:ImageButton ID="btnEdit" ImageUrl="style/edit_16.png" runat="server" OnClick="btnEdit_OnClick" /> 
         &nbsp;&nbsp; 
         <asp:ImageButton ID="btnDelete" ImageUrl="style/delete_16.png" runat="server" OnClick="btnDelete_OnClick" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </div> 

Мое событие:

protected void btnDelete_OnClick(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 
    GridViewRow row = (GridViewRow)btn.NamingContainer; 
    string UserName = row.Cells[0].Text; 

    using (objConexao = new SqlConnection(strStringConexao)) 
    { 
     using (objCommand = new SqlCommand(strDeleteUser, objConexao)) 
     { 
      try 
      { 
       objConexao.Open(); 
       objCommand.Parameters.AddWithValue("@UserName", UserName); 
       var objDataReader = objCommand.ExecuteReader(); 
      } 
      finally 
      { 
       objConexao.Close(); 
      } 
     } 
    } 
} 

Мой Page_Load и CarregaGrid()

public void CarregaGrid() 
{ 
    var listaRequest = new UsersNDR().ConsultUsers(); 
    if (listaRequest != null) 
    { 
     this.GridView1.DataSource = listaRequest; 
     this.GridView1.DataBind(); 

     foreach (GridViewRow row in GridView1.Rows) 
     { 
      string idioma = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString(); 

      if (Session["idioma"].ToString() != null) 
      { 
       idioma = Session["idioma"].ToString(); 
      } 

      ImageButton btnDelete = (ImageButton)row.FindControl("btnDelete"); 
      ImageButton btnEdit = (ImageButton)row.FindControl("btnEdit"); 
      btnDelete.ToolTip = Idioma.RetornaMensagem("btnDelete"); 
      btnEdit.ToolTip = Idioma.RetornaMensagem("btnEdit"); 
     } 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    string idioma = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString(); 

    if (Session["idioma"].ToString() != null) 
    { 
     idioma = Session["idioma"].ToString(); 
    } 

    Idioma.MudaCultura(idioma); 
    btnCreate.Text = Idioma.RetornaMensagem("btnCreate"); 
    GridView1.Columns[0].HeaderText = Idioma.RetornaMensagem("UserName"); 
    GridView1.Columns[1].HeaderText = Idioma.RetornaMensagem("DisplayName"); 
    GridView1.Columns[2].HeaderText = Idioma.RetornaMensagem("email"); 
    GridView1.Columns[3].HeaderText = Idioma.RetornaMensagem("ProfileName"); 
    GridView1.Columns[4].HeaderText = Idioma.RetornaMensagem("Action"); 
    CarregaGrid(); 
} 
+1

На стороне записки, вы не нуждаетесь в 'Try-finally' блок, который закрывает соединение, то есть то, что' используя (objConexao = новый SqlConnection (strStringConexao)) 'делает автоматически для тебя. –

+0

Можете ли вы опубликовать код из своего события 'Page_Load'? –

ответ

4

Я считаю, что тот факт, что повторно привязки сетки проблема в каждом ответе, попробуйте обернуть логику изменения сетки в !IsPostBack, как это:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     string idioma = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString(); 

     if (Session["idioma"].ToString() != null) 
     { 
      idioma = Session["idioma"].ToString(); 
     } 

     Idioma.MudaCultura(idioma); 
     btnCreate.Text = Idioma.RetornaMensagem("btnCreate"); 
     GridView1.Columns[0].HeaderText = Idioma.RetornaMensagem("UserName"); 
     GridView1.Columns[1].HeaderText = Idioma.RetornaMensagem("DisplayName"); 
     GridView1.Columns[2].HeaderText = Idioma.RetornaMensagem("email"); 
     GridView1.Columns[3].HeaderText = Idioma.RetornaMensagem("ProfileName"); 
     GridView1.Columns[4].HeaderText = Idioma.RetornaMensagem("Action"); 
     CarregaGrid(); 
    } 
}