2010-06-11 8 views
1

J'utilise ajax et jquery pour charger du contenu dans un div.Utilisation de Jquery et Ajax dans ASP.NET

Mon jquery ressemble à ceci

$("a.trigger").click(function() { 

    $.ajax({ 

    type: "POST", 

    url: "GetStuff.aspx", 

    data: "id=0", 

    success: function(response){ 

    $("#contentDiv").html(response); 

    } 

    }); 

    }); 

En GetStuff.aspx Je voudrais écrire quelques contrôles html asp.net comme

private void Page_Load(object sender, System.EventArgs e) 

    { 

     Response.Expires = -1; 

     Response.ContentType = "text/plain"; 

     Response.Write("<asp:Label id=\"label1\" runat=\"server\" text=\"helloworld\"/>"); 

     Response.End(); 

    } 

Cependant l'étiquette ne figure pas sur la page.

J'ai essayé de mettre le asp: Étiquette dans mon fichier ASPX comme celui-ci

<%@ Page Language="C#" Inherits="Untitled.GetStuff" %> 

<asp:Label id="label12" runat="server" text="helloworld2"/> 

Il ne fonctionne pas. Comment afficher les commandes html d'asp.net?

+0

Quel a été le résultat de votre deuxième exemple ci-dessus? Par exemple, y avait-il une erreur de serveur? Quel balisage a été envoyé au navigateur? Il me semble qu'il aurait dû faire ce que je pense que vous demandez (bien que cela aurait probablement créé un état DOM invalide qui aurait des balises html et body dans une balise div). – joelt

+0

D'accord j'ai réessayé mon deuxième exemple et il a fait exactement ce que j'avais initialement voulu. Je ne sais pas pourquoi j'ai obtenu un résultat différent quand je l'ai essayé la première fois. – xkcd

Répondre

4

Vous ne pouvez pas. Vous essayez d'ajouter un contrôle côté serveur à une page côté client. Essayez de retourner ceci:

Response.Write("<span id=\"label1\">helloworld</span>); 

Toutefois, lorsque vous Postback la page que vous ne serez pas le luxe de pouvoir dire

string text = label1.Text; //DOES NOT WORK 
+0

Si je voulais le luxe de faire chaîne texte = label1.Texte; // NE FONCTIONNE PAS Où placerais-je mon asp: label control? Dans le fichier aspx? Mais après l'appel ajax il n'apparaîtra pas dans mon div. – xkcd

+0

La façon dont vous essayez de charger ce code html à l'aide d'ajax, vous n'allez pas le faire fonctionner. Lorsque la page est publiée, ce contrôle côté serveur n'a jamais été enregistré avec la page. Cela se produit généralement au moment de la compilation lorsque vous créez une page ASPX dont les contrôles sont des propriétés de la page. Cet article pourrait être utile de lire pour vous: http://www.4guysfromrolla.com/articles/092904-1.aspx –

1

Vous essayez d'écrire un ASP.NET contrôle serveur comme le résultat? Vous êtes en fait les choses = surcharger D

Si vous avez écrit sur

<span>HelloWorld</span> 

Au lieu de la

<asp:Label Id="label1" runat="server" text="HelloWorld" /> 

Vous obtiendrez ce que vous voulez. Lorsque vous écrivez dans le flux de réponses, vous devez écrire un texte HTML valide, quel qu'il soit. Une étiquette ASP.NET est seulement transformée en <span> lorsque sa fonction de rendu est appelée dans le cadre du cycle de vie ASP.NET.

+0

J'ai utilisé asp: Contrôle de l'étiquette à titre d'exemple. Comment utiliser les contrôles asp.net par opposition au HTML? – xkcd

+0

Vous devez suivre un chemin similaire à celui que @Matt Sherman a écrit, où vous renvoyez la réponse de l'appel Web au format HTML et évitez d'appeler Response.Write/Response.End. Cela pose cependant des problèmes différents, tels que la façon de se débarrasser du formulaire HTML supplémentaire et du point d'intersection viewstate associé qui sera retourné avec la réponse. – Tejs

0

Traitez simplement GetStuff.aspx comme une page normale. Mettez votre code HTML dans le .aspx, et toute la logique métier dans le Page_Load. Il affichera ensuite du code HTML que votre appel ajax pourra utiliser.

mise à jour:

Votre page GetStuff.aspx serait quelque chose comme:

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

<!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></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:Label Id="label1" runat="server" text="Hello World" /> 
    <asp:Label Id="idToDisplay" runat="server" /> 
    </div> 
    </form> 
</body> 
</html> 

Alors votre GetStuff.aspx.cs de CodeBehind contiendraient:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var id = Request["id"].ToString(); 
    this.idToDisplay.Text = id; 
} 

Bien sûr, votre Page_Load peut faire une requête de base de données ou autre.

+0

J'ai essayé ceci. Pouvez-vous me montrer un exemple? – xkcd

+0

mis à jour ci-dessus ... –