2013-04-25 1 views
0

У меня есть ретранслятор, и внутри этого ретранслятора у меня есть UpdatePanel. В этой UpdatePanel у меня есть скрытое, и я хочу отобразить его в событии Repeater_ItemCommand. Я struggeling выяснить это, и я не Jquery-гуру .. В Firebug-консоль он говорит: ReferenceError: ShowError не определенПытается запустить функцию JQuery из UpdatePanel внутри репитера (по ItemCommand)

Это UpdatePanel (ДИВ #errorMessage находится в нижней части):

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
        <ContentTemplate> 
         <%# GetComments (DataBinder.Eval(Container, "DataItem.id")) %> 
         <div class="contact_form"> 
          <ul> 
           <li> 
            <h2>Skriv en kommentar til oss!</h2> 
           </li> 
           <li> 
            <asp:TextBox ID="txtName" runat="server" CssClass="txtBox" placeholder="Ditt navn" />                                       
            <span class="form_hint">Ditt navn skal stå her</span> 
           </li> 
           <li> 
            <asp:TextBox ID="txtCaptcha" runat="server" CssClass="txtBox" placeholder="Skriv resultatet av 10 pluss 6 her" />                    
            <span class="form_hint">Du klarer vel å regne ut 10+6? :-)</span> 
           </li> 
           <li> 
            <asp:TextBox ID="txtComment" runat="server" TextMode="MultiLine" placeholder="Din kommentar" />                    
           </li>                   
           <li> 
            <asp:Button ID="cmdSaveComment" CssClass="button" runat="server" CommandName="SaveComment" CommandArgument='<%# Eval("id")%>' Text="Puliser kommentar" /> 
           </li>                   
          </ul> 
          <div id="#errorMessage<%# Eval("id") %>" style="display:none;"> 
           <p>Du må skrive resultatet av 10+6 i boksen for å få publisert kommentaren</p> 
          </div> 
         </div> 
        </ContentTemplate> 
       </asp:UpdatePanel> 

в моем файле .js, я сделал эту функцию:

$(document).ready(function showError (divId) { 
     $id = divId; 
     $("#errorMessage" + $id + '').show("slide");   
     return false;  
}); 

А в коде, где я хочу, чтобы вызвать это:

protected void RepeaterBlog_ItemCommand(Object Sender, RepeaterCommandEventArgs e) 
     {    
      if (e.CommandName == "SaveComment") 
      { 
       int blogID = Int32.Parse(e.CommandArgument.ToString()); 
       string name = ((TextBox)e.Item.FindControl("txtName")).Text; 
       string comment = ((TextBox)e.Item.FindControl("txtComment")).Text; 
       string captcha = ((TextBox)e.Item.FindControl("txtCaptcha")).Text; 

       if (captcha == "16") 
       { 
        if (name == "") 
        { 
         name = "Anonym"; 
        } 
        name = name.Replace("'", "&#39;"); 
        comment = comment.Replace("'", "&#39;"); 
        dh.NewComment(name, comment, blogID); 
        GetItems(); 
       } 
       else 
       { 
        //show error box 
        string js = "$(document).ready(function() { showError('" + blogID.ToString() + "'); });"; 
        ScriptManager.RegisterStartupScript(this, GetType(), blogID.ToString(), js, true); 

        //string js = "$(document).ready(function() {$(document).on('show', function() { $('#errorMessage" + blogID.ToString() + "').show('slide');return false;})});"; 
        //ScriptManager.RegisterStartupScript(this, this.GetType(), blogID.ToString(), js, true); 

       }    
      }    
     } 

Может кто-нибудь, пожалуйста, помогите мне разобраться, что я делаю неправильно?

ответ

1

Вам действительно не нужно использовать обертку $(document).ready(..., когда вы находитесь. Это используется для запуска javascript после загрузки всех элементов страницы, но для чего вам нужно просто удалить это и использовать прямые вызовы функций javascript.

Ваш файл JS:

function showError (divId) { 
     $id = divId; 
     $("#errorMessage" + $id + '').show("slide");   
     return false;  
} 

Ваш код .Net

//// 
else 
{ 
    //show error box 
    string js = "showError('" + blogID.ToString() + "');"; 
    ScriptManager.RegisterStartupScript(this, GetType(), blogID.ToString(), js, true); 
} 
////  

Кроме того, в вашем ErrorMessage DIV вы не должны включать хэштегом в ID. В своем jquery-вызове вы используете это, чтобы указать, что вы ссылаетесь на элемент ID, но это не должно быть частью назначения идентификатора.

<div id="errorMessage<%# Eval("id") %>" style="display:none;"> 
    <p>Du må skrive resultatet av 10+6 i boksen for å få publisert kommentaren</p> 
</div> 
+0

Я сделал то, что вы предлагали. Удалите только теги

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