2014-09-05 4 views
0

У меня есть LinkButton внутри UpdatePanel:Почему Javascript предупреждение не отображается внутри UpdatePanel

<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="upSaveComplete" ClientIDMode="Static"> 
    <ContentTemplate> 
     <asp:Panel ID="Panel90" runat="server" CssClass="navInnerDiv" Width="200px" ClientIDMode="Static"> 
      <asp:Panel ID="Panel91" runat="server" CssClass="navInnerDivContents"> 
       <asp:Panel ID="Panel92" runat="server" CssClass="navInnerDivContentsTop"> 
        <asp:Panel ID="Panel93" runat="server" CssClass="navInnerDivContentsTopSubTwo"> 
         <asp:ImageButton ID="ibSave" ImageUrl="~/theImages/Save.png" runat="server" CssClass="navImages" OnClick="btnSave_Click" /> 
         <br /> 
         <asp:LinkButton ID="btnSave" runat="server" Text="Save" ClientIDMode="Static" OnClick="btnSave_Click" CssClass="linkOff" /> 
        </asp:Panel> 
       </asp:Panel> 
       <asp:Panel ID="Panel94" runat="server" CssClass="navInnerDivContentsBottom"> 
        Task Actions 
       </asp:Panel> 
      </asp:Panel> 
     </asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 

код позади:

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    ShowMessage(); 
    if (CheckSameUser() == strUser) 
    { 
     UpdatePanel upTDNotes = (UpdatePanel)ContentMain.FindControl("upTaskDetailRight"); 
     if (upTDNotes != null) 
     { 
      upTDNotes.Update(); 
     } 
     //MessageBox.Show(lblTDNotes.Value); 
     string strSaveQuery = @"{QUERY}"; 
     //MessageBox.Show(strSaveQuery); 

     using (SqlConnection scConn = new SqlConnection(strMainConn)) 
     { 
      try 
      { 
       scConn.Open(); 
       SqlCommand cmd = new SqlCommand(strSaveQuery, scConn); 

       cmd.ExecuteNonQuery(); 

       Session["queryChanged"] = "Yes"; 
      } 
      catch (Exception ce) 
      { 
      } 
     } 
    } 
    else 
    { 
    } 
    Response.Redirect("YourTasks.aspx"); 
} 

public void ShowMessage() 
{ 
    string message = "Hello!"; 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append("<script type = 'text/javascript'>"); 
    sb.Append("window.onload=function(){"); 
    sb.Append("alert('"); 
    sb.Append(message); 
    sb.Append("')};"); 
    sb.Append("</script>"); 
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString()); 
} 

При нажатии на кнопку Сохранить, не отображается предупреждение , У меня уже есть ScriptManager, но он все еще не работает.

Как я могу изменить мой код, так что я могу видеть предупреждение (или даже подтвердить) окно на клик по ссылке/изображение

+0

Итак, какой бит этого кода * предполагается * для отображения предупреждения? Потому что представленный код никогда не вызывает его. Кроме того, обратите внимание на другие проблемы: 1) режим обновления является условным * и 2) страница всегда * перенаправляется *. – user2864740

+0

Не могли бы вы создать класс BasePage и создать внутри него статический метод, например, создать файл с именем «BasePage.cs» в объявлении открытого класса ? Public class BasePage: System.Web.UI.Page {} 'внутри из них создаются такие методы public static void ShowClientMessageDlg (строка msg, строка aValue, строка redirect = "") { 10 string msgFormat; msgFormat = string.Format ("{0}", aValue); msg = msg + msgFormat; HttpContext.Current.Response.Write (""); } – MethodMan

+0

@DJKRAZE Heavens no, в WebForms! Гораздо меньше внутри UpdatePanel. – user2864740

ответ

3

вырублены на самом базовом уровне, ваш код говорит, что это:

ShowMessage(); 
if (CheckSameUser() == strUser) 
{ 
    // Stuff 
} 
else 
{ 
} 
Response.Redirect("YourTasks.aspx"); 

Итак, вы настроили бит javascript для запуска ... и затем вы отправите инструкцию в браузер для перенаправления на страницу «YourTasks.aspx».

javascript был настроен для рендеринга, когда ваша страница была отправлена ​​в браузер ... но вы перенаправляете до того, как ваша страница может быть отображена, чтобы javascript никогда не доходил до браузера и поэтому никогда не исполнялся.

Если вы хотите, чтобы на клиенте отображалось сообщение на клиенте сразу, а затем сервер заходил и что-то делал (например, сохранял ваши данные, а затем отправлял вас на новую страницу), ваш лучший выбор был бы для привязки javascript к событию на стороне клиента, например, для представления формы. Вы можете сделать это легко с помощью jQuery или даже с базовым javascript (хотя панель обновления может немного усложнить ситуацию.)

+0

Есть, по крайней мере, две другие проблемы, но я пойду с это как одна веская причина. – user2864740

+0

Если я в блоке 'IF' pr выполняет ShowMessage(), не должен ли он отображать предупреждение перед тем, как нажать Response.Redirect? – SearchForKnowledge

+0

@SearchForKnowledge No. Редирект ** уничтожает ** любой от отображаемого вывода, который был отправлен * в качестве ответа, - это все, что угодно от SM/ScriptBlock. JavaScript работает только *, когда клиент получает HTML/script для этого (когда n запрос ormal завершается с помощью сочетания UpdatePanel/HTML), который никогда не возникает из-за перенаправления. – user2864740

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

  • Нет связанных вопросов^_^