asp.net
  • javascript
  • data-binding
  • 2009-09-21 3 views 1 likes 
    1

    Пытается всплыть фреймворк IFrame Shadowbox с JQuery из asp: gridview datarow. Я не могу получить правильные котировки в строке:Asp.Net и Shadowbox

    <asp:ImageButton ID="btnEdit" runat="server" 
        OnClientClick='<%# "javascript:popAccount(\'"+ 
        Eval("id", "Popup.aspx?id={0}")+"\');" %>' /> 
    

    Сообщение об ошибке Parser: тег сервера плохо сформирован.

    Без уцелевших одинарные кавычки (может не работать, но разбирает правильно):

    <asp:ImageButton ID="btnEdit" runat="server" 
        OnClientClick='<%# "javascript:popAccount("+ 
        Eval("id", "Popup.aspx?id={0}")+");" %>' /> 
    

    Клиентский HTML, как и ожидалось:

    onclick="javascript:popAccount(Popup.aspx?id=3ce3b19c-1899-4e1c-b3ce-55e5c02f1);" 
    

    Как получить котировки INTO в JavaScript?

    Редактировать: Добавлено решение. Это не очень общее, так как типы данных привязки должны быть известны, чтобы получить доступ к свойству id. Ключ (как определено в параметре DataKeyNames GrodView), по-видимому, не отображается в аргументе события. Но это работает.

    protected void editGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
        { 
         // do not look at header or footer 
         if (e.Row.RowType == DataControlRowType.DataRow) 
         { 
          ImageButton btn = e.Row.FindControl("btnPopup") as ImageButton; 
          if (btn != null) 
          { 
           btn.OnClientClick = 
           "javascript:popAccount('EditAccountPopup.aspx?"+ 
           Constants.acctidParam+"="+ 
           ((tb_account)(e.Row.DataItem)).id.ToString()+"');"; 
          } 
         } 
    

    ответ

    1

    Возьмите ImageButton в RowDataBound событии GridView в коде на, и добавить свойство оттуда.

    Но вы уверены, что вам нужно использовать серверный контроль? Как насчет простого изображения? Если вы «заменяете» поведение клика ImageButton, оно не похоже на то, что вам это нужно вообще.

    Update:

    Для кода за решение, я закодирован этот маленький образец (в VB.NET, извините):

    Private Sub gridview1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridview1.RowDataBound 
        Select Case e.Row.RowType 
         Case DataControlRowType.DataRow 
         Dim btnEdit As ImageButton = CType(e.Row.Cells(0).FindControl("btnEdit"), ImageButton) 
         Dim strID As String = CType(e.Row.DataItem, Guid).ToString 
    
         btnEdit.Attributes.Add("onclick", String.Format("javascript:popAccount('Popup.aspx?id={0}');", strID)) 
        End Select 
        End Sub 
    

    Однако, я все же рекомендую вам пойти с более простым aproach, jQuery здесь превосходный. Нет необходимости для любого кода в вашем коде:

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
        <title></title> 
    
        <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js" type="text/javascript"></script> 
    
        <script type="text/javascript" language="javascript"> 
        $(document).ready(function() { 
    
         $("img.edit").click(function() { 
         var sID = this.id.replace('btnEdit_', ''); 
         alert(sID); // Add your popup opening logic here... 
         }); 
        }); 
        </script> 
    
    </head> 
    <body> 
        <form id="form1" runat="server"> 
        <div> 
        <asp:GridView ID="gridview2" AutoGenerateColumns="false" runat="server"> 
         <Columns> 
         <asp:TemplateField> 
          <ItemTemplate> 
          <img id="btnEdit_<%#Container.DataItem %>" class="edit" /> 
          </ItemTemplate> 
         </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 
        </div> 
        </form> 
    </body> 
    </html> 
    
    +0

    Имеет ли значение этот вопрос? Я должен использовать тег привязки данных в любом случае ... – cdonner

    +0

    Спасибо за принятый ответ. Я обновил сообщение, чтобы включить предложение для решения, которое использует codebehind, и более простая версия с использованием jQuery. –

    0

    Если вы хотите сохранить ваш код так, как это, почему бы просто не сделать это?

    <asp:ImageButton ID="btnEdit" runat="server" 
        OnClientClick='<%# "javascript:popAccount(&quot"+ 
        Eval("id", "Popup.aspx?id={0}")+"&quot);" %>' /> 
    
    +0

    Это было бы неплохо, но не работает в IE7. – cdonner

    +0

    Я пробовал различные типы документов (строгое/переходное) в режиме совместимости IE8, и я получаю исключение из этой строки. Он работает в режиме стандартов. – cdonner

    +0

    Жестко закодированный вызов функции отлично работает во всех режимах в IE8. – cdonner

    Смежные вопросы