2008-11-14 3 views
1

У меня есть Datalist, который находится внутри панели обновления, и находится в панели в modalpopupextender;О командах DataList Asp.Net и EventValidation

Я могу перечислить элементы, как я хотел. Я также помещаю 2 кнопки для удаления и AddBelow. Вот разметка:

<asp:DataList ID="SpeedDialsDL" runat="server"> 
       <ItemTemplate> 
        <table id="speedDialValueEditorTable" width="100%"> 
         <tr> 
          <td width="275px"> 
           <asp:Label ID="ValueLabel" runat="server" Text="Value"></asp:Label> 
          </td> 
          <td> 
           <asp:TextBox ID="ValueTextBox" runat="server" Text='<%# Eval("Value") %>' Width="340px" 
            Enabled="false"></asp:TextBox> 
          </td> 
         </tr>      
         <tr> 
          <td colspan="2"> 
           <asp:Button ID="Delete" runat="server" Text="Delete" CommandName="Delete" 
           CausesValidation="false" />&nbsp; 
           <asp:Button ID="AddNewButton" runat="server" Text="AddBelow" CommandName="AddBelow" 
            CausesValidation="false" /> 
          </td> 
         </tr> 
        </table> 
       </ItemTemplate> 
      </asp:DataList> 

И регистр evenst как следующее: (я использовал как ItemCommand и DeleteCommand, чтобы увидеть, что работает :)

protected void Page_Load(object sender, EventArgs e) 
{ 
    SpeedDialsDL.ItemCommand += SpeedDialsDL_ItemCommand; 
    SpeedDialsDL.DeleteCommand += SpeedDialsDL_ItemCommand;    
}   

void SpeedDialsDL_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    switch (e.CommandName) 
    { 
     case "Delete": 
      this.DeleteFromList((string)e.CommandArgument); 
      break; 
     case "AddBelow": 
      break; 
    } 
} 

Но когда я нажмите кнопку Удалить или кнопки AddBelow я получаю следующее ошибка:

Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation. 

Я отключил eventvalidation страницы, но это событие не может быть пойман ...

Что мне здесь не хватает?

ответ

0

Управление регистрирует свои события во время рендеринга, а затем проверяет события во время обработки обратной связи или обратного вызова. Вы регистрируете события вручную во время Page_Load.

Попробуйте переформатировать код, чтобы указать обработчик событий на странице .aspx, привяжите идентификатор элемента к CommandArgument элемента, затем получите идентификатор связанного элемента в обработчике. У меня также были отдельные обработчики событий для разных событий, это немного чище. Что-то вроде:

<asp:DataList ID="SpeedDialsDL" runat="server">     
<ItemTemplate>      
    <table id="speedDialValueEditorTable" width="100%">       
     <tr>        
      <td width="275px">         
       <asp:Label ID="ValueLabel" runat="server" Text="Value"></asp:Label>        
      </td>        
      <td>         
       <asp:TextBox ID="ValueTextBox" runat="server" Text='<%# Eval("Value") %>' Width="340px" Enabled="false"></asp:TextBox>        
      </td>      
     </tr>            
     <tr>        
      <td colspan="2">         
       <asp:Button ID="Delete" runat="server" Text="Delete" OnClick="Delete" CausesValidation="false" CommandArgument='<%# Eval("Id") %>' /> 
       <asp:Button ID="AddNewButton" runat="server" Text="AddBelow" OnClick="AddBelow" CausesValidation="false" CommandArgument='<%# Eval("Id") %>' />        
      </td>      
     </tr>     
    </table>     
</ItemTemplate>    

protected void Delete(object sender, EventArgs e) 
{ 
    Button b = (Button)sender as Button; 
    string boundItemId = b.CommandArgument; 
    //handle delete 
} 

protected void AddBelow(object sender, EventArgs e) 
{ 
    Button b = (Button)sender as Button; 
    string boundItemId = b.CommandArgument; 
    //handle add below 
} 
Смежные вопросы