2009-07-23 7 views
3

J'ai une div sur la page, dont le contenu va changer par javascript, je veux obtenir sa valeur à partir du code C#. mais, il renvoie toujours la valeur vide ou initiale, pas de valeur modifiée.Comment obtenir du contenu div modifié par javascript?

Si je passe de div à caché, cela fonctionne bien. Je ne sais pas pourquoi?

Voici le code:


<head runat="server"> 
    <title>Untitled Page</title> 
    <script type="text/javascript"> 
     foo = function() 
     { 
      var d = document.getElementById('divTest'); 
      d.innerHTML = 'my value'; 

      var e = document.getElementById('hiddenTest'); 
      e.value = 'my value'; 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server" > 
    <div> 
     <div id="divTest" runat="server" /> 
     <input type="hidden" runat="server" id="hiddenTest" /> 
     <input type="button" value="test" onclick="javascript:foo();" /> 

     <asp:Button ID="btnTest" runat="server" Text="ASP.NET Button" OnClick="OnbtnTest" /> 
    </div> 
    </form> 
</body> 

ici est le code C#:


    protected void OnbtnTest(object sender, EventArgs e) 
    { 
     Response.Write(string.Format("alert('{0}');", hiddenTest.Value)); 
    } 

Répondre

2

éléments d'entrée de formulaire dans un élément de formulaire affiché au serveur, tout autre contenu est statique et non affiché au serveur. C'est la règle fondamentale de HTTP, vous pouvez voir les détails from here.

Vous avez deux options, tout en préparant le contenu de votre div, écrire le même contenu dans un champ caché. Et côté serveur, obtenez la valeur du champ caché.

Ou faites un appel AJAX pendant que vous préparez votre contenu pour l'obtenir côté serveur.

+0

> tout le contenu est statique et n'est pas publié sur le serveur. un lien MSDN à ce sujet? > Vous avez l'option, tout en préparant le contenu de votre div, écrire le même contenu dans un champ caché. Et côté serveur, obtenez la valeur du champ caché. oui, c'est ma solution que j'ai utilisée dans le projet. –

+0

@Copper: ce n'est pas la décision de Microsoft pour ASP.NET, c'est la règle fondamentale de HTTP. – Canavar

+0

@Copper: Que fonctionne HTTP/HTML. Toutes les données affichées sont dans les éléments INPUT/TEXTAREA/SELECT ... Aucun autre contenu HTML n'est renvoyé. Vous voyez seulement la valeur dans Asp.net parce qu'elle économise sa valeur à VIEWSTATE ... –

2

C'est parce que seuls les éléments de formulaire sont soumis à l'arrière côté serveur.

0

Votre code javascript ne sera pas en mesure de voir les hiddenTest et divTest contrôles car ils fonctionnent à partir de côté serveur. Votre javascript essaiera de rechercher l'ID client du contrôle. S'il vous plaît essayer de remplacer la fonction foo() avec ceci:

foo = function() 
{ 
    var d = document.getElementById('<%= this.divTest.ClientID %>'); 
    d.innerHTML = 'my value'; 

    var e = document.getElementById('<%= this.hiddenTest.ClientID %>'); 
    e.value = 'my value'; 
} 
+0

votre code est utile si le contrôle html dans le modèle de contenu, mais mon exemple de code est directement mis sur la page. alors, votre code et le mien ont tous les deux raison. :) –

+0

merci de le signaler. – Randz

0

Alors, quel est le but réel? Vous voulez garder la trace de la valeur précédente lorsqu'un utilisateur modifie une entrée, ou vous voulez renvoyer la valeur entrée par l'utilisateur à un script côté serveur? Ou vous voulez juste que l'utilisateur voit une alerte des données qu'ils viennent d'entrer?

S'il s'agit du premier, il suffit de déplacer les données précédentes vers un tableau ou un objet dans cette fonction. Ainsi, vous ajouteriez un gestionnaire d'événement onchange qui déplacerait la «valeur actuelle» précédemment stockée dans le tableau «ancienne valeur» avant de remplacer la «valeur actuelle».

Si vous voulez transmettre la valeur d'entrée au serveur, vous devez utiliser AJAX. Cela simplifiera aussi votre code. Au lieu de faire fonctionner l'interface utilisateur par C#, il ne fait que croiser l'entrée de l'utilisateur, décide de la valeur de retour et la renvoie au javascript, qui effectue ensuite le travail de sortie vers l'utilisateur. Je suggère jquery pour rendre ajax plus facile, par exemple:

$("input#testinput).post(
        "myserverscript.aspx", 
        {question : "Who Loves the Sun?"}, 
        function(answer) { 
        alert("Answer: " + answer); 
        }); 

Mais avec votre question, je suis un peu floue sur la bonne réponse exacte, comme je ne sais pas pourquoi vous utilisez le bit C# dans le première place pour faire quelque chose que javascript peut faire et pourquoi vous utilisez des boutons d'asp au lieu de html simple.

0

Dans mon cas, j'ai fini par utiliser AJAX HTMLEditor au lieu de la balise Div. contrairement à Div toute modification apportée à HTMLEditor côté client sera publiée sur le serveur

Questions connexes