2010-03-09 6 views
0

j'ai une page Web avec un div vide, id = "PreAcquisitionDiv" runat = "server"InnerHtml fonctionne la première fois, mais pas après la publication

Dans le C# code-behind, sur Page_Load, je construis une table et le définir à PreAcquisitionDiv.InnerHtml

Ma page affiche OK. Je provoque un PostBack, avec l'intention de changer les données dans la table. Dans le code, le PreAcquisitionDiv.InnerHtml change, mais la table que j'ai mise là la première fois est toujours affichée sur la page à la place.

J'ai vu quelques avertissements sur l'utilisation de InnerHtml, mais les exemples d'alternatives que j'ai vu sont JavaScript. J'utilise IE 8, mais j'observe le même comportement dans Google Chrome.

Merci pour vos suggestions!

Par exemple, ce code affiche "SomeStuff" lorsqu'il affiche la page pour la première fois; alors encore "SomeStuff" après le PostBack même si le InnerHtml a été changé.

protected void Page_Load(object sender, EventArgs e) 
{ 
    StringBuilder html = new StringBuilder(@"<TABLE BORDER='1' WIDTH='100%'>"); 
    if(!IsPostBack) 
    { 
     html.Append(@"<TR><TD>SomeStuff</TD></TR>"); 
    } 
    else 
    { 
     html.Append(@"<TR><TD>Some New Stuff</TD></TR>"); 
    } 
    html.Append(@"</TABLE>"); 
    this.PreAcquisitionDiv.InnerHtml = html.ToString(); 
} 
+0

-vous à InnerHtml plutôt AJOUT DE que de le remplacer? – Kirschstein

+0

innerHtml est aussi javascript :) Pouvez-vous poster votre code, il est très difficile de deviner ce qui se passe sans cela. –

+0

Modifié et affiché le code ci-dessus. –

Répondre

0

Si vous modifiez le code HTML sur le post retour vous exécutez votre fonction pour le mettre sur le post de retour aussi bien?

MISE À JOUR: J'ai copié et collé votre code et cela fonctionne très bien pour moi. Voici mon code entier derrière:

using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using System.Text; 

namespace Sandbox 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      StringBuilder html = new StringBuilder(@"<TABLE BORDER='1' WIDTH='100%'>"); 
      if (!IsPostBack) 
      { 
       html.Append(@"<TR><TD>SomeStuff</TD></TR>"); 
      } 
      else 
      { 
       html.Append(@"<TR><TD>Some New Stuff</TD></TR>"); 
      } 
      html.Append(@"</TABLE>"); 
      this.PreAcquisitionDiv.InnerHtml = html.ToString(); 
     } 

     protected void btnTest_OnClick(object sender, EventArgs e) 
     { 
     } 
    } 
} 

Et voici ma page entière ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Sandbox._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div id="PreAcquisitionDiv" runat="server"> 

    </div> 
    <asp:Button ID="btnTest" runat="server" OnClick="btnTest_OnClick" /> 
    </form> 
</body> 
</html> 
+0

Oui, je cours la méthode et, quand j'arrive à l'instruction, this.PreAcquisitionDiv.InnerHtml = html.ToString(); la valeur change. C'est juste que, quand la page est ré-affichée, les premières valeurs sont toujours là et les nouvelles ne le sont pas. –

+0

Post du code, ne peut pas aller plus loin sans. –

+0

Édité et publié ci-dessus; Je vous remercie. –

Questions connexes