8
votes

Charger Ascx via jQuery

Y a-t-il un moyen de charger le fichier ASCX par JQuery?

Mise à jour :

Merci à @MMETT et @Yads. J'utilise un gestionnaire avec le code JQuery Ajax suivant: xxx

mais je reçois une erreur. Mon code est faux?

Une autre mise à jour : J'utilise xxx

et c'est ce que je reçois:

JSON invalide:

Test => (Ce test est l'étiquette à l'intérieur de mon ASCX)

et mon fichier ascx après erreur !!!

une autre update :

Mon fichier ASCX est quelque chose comme ceci: xxx

mais lorsque vous appelez Ajax, je reçois cette erreur dans ASP: (

Contrôle 'ctl00_ddl' de type 'Dropdownlist' doit être placé dans une étiquette de formulaire avec Runat = Server.

Merci à @Yads. Mais sa solution ne fonctionne que avec la balise HTML.


7 commentaires

Stackoverflow.com/ Questions / 1212639 / ...


Est-ce impossible? Y a-t-il un moyen de convertir le fichier ASCX en ASPX? ou meilleur moyen?


La fonction d'erreur peut prendre un objet de demande, examiner la demande.ResponseText pour savoir quelle est l'erreur.


@Raika Votre type de données dans votre demande doit être 'HTML' pas 'JSON', BTW Vous devez utiliser la balise @ si vous souhaitez notifier quelqu'un


@Yads. Je suis nouveau à JQuery. Pouvez-vous mettre à jour votre réponse avec jQuery? THNAKS ....: P


Quoi que vous essayiez de faire, pourquoi ne pas utiliser un UpdatePanel et laissez ASP.NET le faire pour vous? Les solutions décrites vous donneront un moyen d'envelopper la sortie d'un UserControl et de rendre le code HTML, mais il n'aura aucun contexte, de sorte que cela pourrait aussi bien être HTML.


Au fait, voir ma question similaire: Stackoverflow.com/Questtions/4045509/... ... La 2e réponse a une autre approche intéressante si vous avez vraiment besoin de faire quelque chose comme ça.


3 Réponses :


1
votes

*. Les fichiers ASCX sont rendus sur le côté serveur (à l'intérieur d'une page * .aspx), pas le côté client (où JavaScript est exécuté).

Une option peut être de créer un blanc * .aspx, mettre le contrôle de l'utilisateur sur la page * .aspx, puis obtenir cette page via jQuery et vider le résultat sur la page.

Modifier

Basé sur votre commentaire, j'ai une autre suggestion:

Si vous développez une application de style CMS, vous devez construire vos contrôles * .ascx afin qu'ils soient compatible avec la boîte à outils ASP.NET AJAX . Cela permettra aux utilisateurs d'ajouter du contenu à la page sans effectuer une actualisation complète.

Si vous voulez vraiment faire des choses agréables pour l'utilisateur, vous devriez consulter Pièces Web et ASP.NET AJAX Au fur et à mesure que les éléments Web ont été conçus pour que les utilisateurs puissent personnaliser le contenu de leurs pages.


4 commentaires

Je développe une application Web CMS comme. Je dois appeler une partie de mon application en tant que fichier ASCX. Je ne veux pas poster la page. Y a-t-il une meilleure façon de le faire? Je ne veux pas trop charger toute partie.


@Aika - Si vous voulez vraiment faire des choses de bonne façon, vous ferez votre page Supportez ASP.NET WebForms Ajax (UpdatePanel, etc.) et rendez vos contrôles compatibles avec cela. Cela vous permettrait de charger des choses de manière dynamique via Ajax.


Merci. Pouvez-vous me donner plus de lien sur les pièces Web ou le tutoriel complet pour les pièces Web?


@Aika - Le dernier lien que j'ai posté a des liens vers les pages appropriées sur MSDN. Malheureusement, les pièces Web peuvent être assez complexes, vous devrez donc faire un peu de lecture.



3
votes
public ActionResult Foo()
{
    return new ContentResult
    {
        Content = RenderPartialToString("Foo.ascx", null),
        ContentType = "text/html"
    };
}

//http://www.klopfenstein.net/lorenz.aspx/render-partial-view-to-string-asp-net-mvc-benchmark
public static string RenderPartialToString(string controlName, ViewDataDictionary viewData)
{
    ViewPage vp = new ViewPage();

    vp.ViewData = viewData;

    Control control = vp.LoadControl(controlName);
    vp.Controls.Add(control);

    StringBuilder sb = new StringBuilder();

    using (StringWriter sw = new StringWriter(sb))
    {
        using (HtmlTextWriter tw = new HtmlTextWriter(sw))
        {
            vp.RenderControl(tw);
        }
    }

    return sb.ToString();
}

2 commentaires

@Aika, créez un gestionnaire ashx qui fera la même chose Emmett suggéré et au lieu d'un objet de visualisation crée un objet de page. Vous n'aurez pas besoin du mode de vue non plus.


@Raika Vous pouvez créer des gestionnaires ashx dans WebForms. Je viens de poster une solution.



12
votes

Construire la solution d'Emmett

jQuery.ajax({
    type: "POST",  //GET
    url: "Foo.ashx",
    dataType: "html",
    success: function (response)
    {
        jQuery('#controlload').append(response); // or response
    },
    error: function ()
    {
        jQuery('#controlload').append('error');
    }
 });


8 commentaires

@Raika oui juste aller add-> nouvel article-> Générique gestionnaire


@Raika pas de soucis. Je suppose également que les travaux de solution d'Emmett :-)


@Yads. Merci. Je suis la question de la mise à jour. S'il vous plaît aidez-moi aussi avec ça aussi.


@Aika, essayez l'appel AJAX inclus.


@Aika, essayez le rendu mis à jour du rendez-vous, si cela ne fonctionne pas. Vous pouvez être sol si vous souhaitez continuer à utiliser des commandes de serveur dans votre ASCX. Si vous souhaitez basculer votre ASCX sur HTML ou utiliser des balises de serveur, vous devriez être bien.


m, m Obtenir une erreur d'exécution des erreurs de demande d'enfant pour le gestionnaire 'system.web.ui.page'. Mais de quelque manière que ce soit, merci de votre aide et je pense que c'est mieux de travailler sur une autre solution à la place.


@Aika est-ce que cela a finalement travaillé avec ASP.NET Controls sur un général ASCX?


Comment transmettez-vous des params vers RenderPartialtostring ("Foo.ascx")?