11
votes

Comment afficher un ASPX dans un autre ASPX DIV Dynamiquement au moment de l'exécution?

Voici ce que j'essaie de faire dans ASP.NET:

créer une page intitulée Main.aspx. Cette page a un div et un boutons.

Le navigateur charge Main.aspx. Ensuite, lorsque je clique sur le bouton, je veux charger la page Page99.aspx dans la DIV dans Main.aspx Dynamiquement, mais sans Main.aspx nécessitant un message.

SO, MAINT.ASPX CHARDS Une fois, et ensuite tout le contenu affiché dans MAIN.ASPX proviendra de différentes pages .aspx.

ps. Je cherche une solution comme ci-dessus, mais pas d'utilisation de cadres.

Mise à jour 1 Je devrais mentionner que cette page99 n'est pas une simple page HTML. Il contiendra des contrôles Web.


1 commentaires

Quelqu'un a eu une bonne réponse sur l'utilisation d'une classe ancêtre, mais malheureusement, il semble avoir été supprimé. Cette personne peut-elle ramener la réponse?


5 Réponses :


4
votes

Autant que je sache, sauf l'utilisation des iframes, il n'y a aucun moyen de charger une page ASPX dans une autre.

Avec les post-packs ou AJAX, vous pouvez utiliser UserControls (ASCX) à la place. Ils peuvent contenir à peu près le même contenu une page peut toute façon, ou utiliser un MasterPage.

Si vous souhaitez n'avoir aucun message, AJAX est probablement la voie à suivre, cependant, il ne vous permet pas de charger une page ASPX dans une autre, mais uniquement pour modifier le contenu de la page que vous êtes sur (entre autres choses).

Je ne suis pas sûr d'autres plateformes pour le développement Web, ils peuvent avoir une solution plus proche de ce que vous voulez faire, alors si ASP.NET n'est pas un "must", vous devriez envisager de vérifier d'autres plates-formes. < / p>


4 commentaires

Donc, si la page99 est plutôt un contrôle de l'utilisateur, cette "incorporation" peut être effectuée au moment de l'exécution lorsque le bouton est cliqué à l'aide de Ajax? [Pourriez-vous me signaler à quelques exemples que vous connaissez, car je n'ai pas été en mesure de trouver des informations spécifiques à ce sujet (les informations trouvées sur Inclus, mais cela ne va pas fonctionner dans mon cas).].


@Liao - Vous devriez lire sur updatepanel: ASP.net/ajax/ Documentation / Live / Vue d'ensemble / ...


J'ai lu un peu à ce sujet, mais pas beaucoup; fera plus de lecture à ce sujet (d'une manière faisante, il est lent dans certains cas).


L'ASCX est probablement le meilleur moyen, mais il existe des moyens de charger une page ASPX à l'intérieur d'une autre à l'aide de jQuery.load ou de voir la réponse ci-dessous - Stackoverflow. COM / A / 2099318/2340825



0
votes

Mise à jour

Merci @ gμårðíÅÑ pour la tête.

L'UFRAME semble avoir été archivé et plus activement activement développé et étant donné le nombre de postes sur les erreurs qui ont disparu sans réponse.

Réponse originale

Peut-être que je manque quelque chose. Mais vous pouvez utiliser UFRAME dans ce cas.

http://msmvps.com/blogs/omar/archive/2008/05/24/Uframe-goodness-of-updatepanel-and-iframe-commez.aspx (ne fonctionne plus)


4 commentaires

UFRAME utilise toujours un iframe, qui n'était pas une option en fonction de la question.


@Siremon, UFrame n'utilise pas iframe comme omar mentionné dans cet article. codeproject.com/kb/aspnet/uframe.aspx


Juste au cas où n'importe qui appartient à ce sujet, le projet semble avoir été archivé et n'est plus activement développé et étant donné le nombre de postes sur les erreurs qui se sont rendues sans réponse, personnellement, je conseillerais contre l'utilisation de cette solution, bien que cela aurait été super était à jour.


@ GμårðïÅÑ, merci pour la tête



6
votes

Si vous ne voulez pas utiliser les iframes, vous pouvez utiliser très bien l'élément objet de HTML. Suivez ici pour voir et l'exemple HTML. Vous pouvez très bien utiliser ceci pour ASPX également avec quelques modifications, comme l'utilisation de la propriété OnClientClick pour le bouton ASPX, etc.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>mouseover image position</title>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />

<style type="text/css">
/*<![CDATA[*/
body
   {
    background-color:#aaaaff;
   }
#one
   {
    position:absolute;
    left:50%;
    top:50%;
    margin:-150px 0 0 -250px;
   }
object
   {
    width:500px; 
    height:300px; 
    border:solid 1px #000000;
   }
 /*//]]>*/
</style>

<script type="text/javascript">
//<![CDATA[
// written by: Coothead
function updateObjectIframe(which){
    document.getElementById('one').innerHTML = '<'+'object id="foo" name="foo" type="text/html" data="'+which.href+'"><\/object>';
}

//]]>
</script>

</head>
<body>

<div id="one">
<object id="foo" name="foo" type="text/html" data="http://www.w3schools.com/"></object>
</div>
<div>
<a href="http://www.google.com" onclick="updateObjectIframe(this); return false;">this is an object test not an iframe test</a>
</div>

</body>
</html>


3 commentaires

C'est génial et super simple! En terminais, quand les choses ont une solution simple, vous vous demandez parfois "pourrait-il être si facile!". Y a-t-il un piège / des mises en garde que vous pouvez penser dans cette approche?


Un piège probable avec cette approche (si votre page intérieure est en effet ASPX), c'est que votre opinion et vos post-retours avec les deux pages pouvaient entrer en conflit, bien qu'il y ait des solutions de contournement.


En règle générale, l'approche HTML ne fonctionne pas. Dans mon cas, il n'est pas en mesure de rendre l'URL du rapport. Il s'agit d'un problème de script de croix me semble, mais cela fonctionne lors de l'accès au compte d'administration à travers quelles pages ont été hébergées dans IIS. Je suis confronté à cela, je dois aller avec une autre approche.



0
votes

Je penserais que vous pourriez faire cela en utilisant Ajax et une méthode Web sur le serveur.

Le ou les boutons de la page appelle la méthode Web à l'aide de Ajax, avec divers arguments de la page correcte pour charger la page. Div. La méthode Web charge la page correcte à l'aide d'une demande Web normale. P>

par exemple: p> xxx pré>

alors la méthode retournerait le code HTML généré par le fichier HTML généré par le fichier ASPX au client. Lorsque le client obtient le rappel, il peut encoder le code HTML et le mettre dans la DIV. P>

var startOfHTML = response.indexOf('&lt;');
var endOfHTML = response.indexOf('</string>');

response = response.substring(startOfHTML, endOfHTML);
response = response.replace(/&lt;/g, "<");
response = response.replace(/&gt;/g, ">");

var div = document.getElementById("myDIV");
div.innerHTML = response;


3 commentaires

Je suppose que cela pourrait fonctionner; Mais je suppose que l'approche ne fonctionnera pas si page99 avait des contrôles Web à ce sujet. Ai-je raison?


Vous finiriez par essayer d'insérer plusieurs étiquettes HTML, corps et tête dans la page. Le champ ViewState serait le dupliqué aussi, la publication de l'arrière ne fonctionnerait probablement plus, et comme vous le signalez correctement et que vous contrôlez correctement, car la page complète de la publication de la page de la page, et les informations de publication nécessaires ne recevraient certainement pas Retour à la page 99, mais cela se retrouverait au lieu de suivre la page parent (provoquant probablement un "" l'arborescence de contrôle dans laquelle la visualisation est en cours de chargement doit correspondre à l'arborescence de contrôle utilisée pour enregistrer la visionnate lors de la demande précédente "Erreur)


@Martin, très bons points. J'avais supposé être basé sur le manque de cadres que les pages «enfants» devaient être assez fondamentales. La question a depuis été mise à jour.



1
votes

Si vous utilisez la boîte à outils Ajax, il devrait être possible de le faire à l'aide d'une page WebControl plutôt que d'une page ASPX.

Si vous essayez de poursuivre cette idée à l'aide de pages ASPX et sans utiliser d'iframe, vous constaterez qu'il n'y a pas d'isolation fournie pour les noms de variables JavaScript et les identifiants d'élément, garantissant donc presque les conflits si vous mettez le contenu de l'ASPX rendu dans une div en utilisant innerhtml; La page ne sera certainement pas en mesure d'effectuer un post-plan partiel comme je l'imagine.

Utilisation d'un WebControl à la place: une meilleure solution consisterait à installer la boîte à outils AJAX si vous ne l'avez pas déjà fait et utilisez un contrôle UpdatePanel. Chargez et décharger de manière dynamique WebControls à l'intérieur de ce panneau (à l'aide de LoadControl ()), ou placez une commande multiview à l'intérieur et modifiez l'ActiveView pour simuler le changement de ce contenu.

L'UpdatePanel permettra à son contenu de mettre à jour sans un potage complet (actualisation de la page).


0 commentaires