J'ai un partiel qui définit un Ajax.BeginForm. Le modèle renvoyé a une propriété pour ReportLink créée sur la ressource serveur qui renvoie une URL à une vue partielle.MVC et Ajax.BeginForm et DIV.Load
Sur l'Ajax, BeginForm.OnSuccessFunction je tente de revenir et charge le contenu html avec $("reportContent").load(AJAXRESULT.RenderLink)
Cependant, entrer dans une boucle infinie quelque part.
modifié pour ajouter des pièces en mouvement:
@model xxxx.Reports.Models.Reports.BaseReportModel
@{Layout = null;}
<div id="reportBase" class="k-content">
<div id="reportControl" >
@using (Ajax.BeginForm(
Model.PostAction,
Model.PostController,
null,
new AjaxOptions() { OnSuccess = "editPostSuccess", OnFailure = "editPostFailure" },
new { id = "reportBase_frmViewer", name = "reportBase_frmViewer" }))
{
@Html.AntiForgeryToken()
@RenderSection("reportParams", required: false)
if (@Model.AllowRefresh){
<input type="button" id="btnRefresh" value="refresh" />
}
if (@Model.AllowExportToPDF){
<input type="button" id="btnPDF" value="PDF" />
}
if (@Model.AllowExportToExcel){
<input type="button" id="btnExcel" value="XLS" />
}
@Html.HiddenFor(p => p.AllowExportToExcel)
@Html.HiddenFor(p => p.AllowExportToPDF)
@Html.HiddenFor(p => p.AllowRefresh)
@Html.HiddenFor(p => p.AutoStartReport)
}
</div>
</div>
<div id="wait"></div>
<div id="reportContent"></div>
//The
<script type="text/javascript">
function editPostSuccess(ajaxContext) {
showWaitIndicator(false);
$('#reportContent').load(ajaxContext.RenderLink**,<--This is a link to an asction that calls renderPartial on the controller** function() {
$("#reportContent").show();
});
}
function editPostFailure(ajaxContext) {
showWaitIndicator(false);
var response = JSON.parse(ajaxContext.responseText);
var errorMessage = response.Message;
$('#reportContent').html('@Resources.labels.lblServerErrorsOnForm' + " " + errorMessage);
$("#reportContent").show();
alert("FAILURE:"+response.Message);
}
Mise à jour: Je ne suis plus sûr que le navigateur est bloquer. Le contenu est de 3,15 Mo. Je pense que le html brut est très verbeux et prend autant de temps à rendre dans le navigateur. Voici la séquence d'exécution:
LoadPartial (ReportModel) - Cela a un Ajax.BeginForm() qui renvoie les métadonnées de rapport et a un bouton de rafraîchissement. Lorsque le bouton d'actualisation est cliqué. J'appelle une fonction js qui charge une div en utilisant div.load (ReportModel.RenderLink), qui est une URL pour obtenir le contenu en html du contrôleur. Le ReportModel.RenderLink pointe vers une méthode de contrôleur qui renvoie un rapport html basé sur les paramètres du modèle envoyés au contrôleur. Le résultat est une vue partielle ("ReportContentPartial", chaîne) où chaîne est le fragment html. Pour tester le ReportContentPartial, il suffit de dumper @Model dans un div comme @ Html.Raw (Model) et c'est là que le navigateur se bloque. Je pensais que c'était dans une boucle infinie mais il prend juste beaucoup de temps pour rendre le html.
La partie que je ne comprends pas quand je l'utilise @ Html.BeginForm et vider le @ Html.Raw (HTML), il est assez rapide. J'ai besoin d'utiliser en quelque sorte le même mécanisme utilisé dans cette méthode de rendu. Le rapport html est récupéré et renvoyé en moins d'une seconde. Le problème est quand je trace hors de @ Html.Raw (HTML) le navigateur se verrouille et prend + 15 secondes pour rendre le contenu.
Je vais continuer à brancher. Je suis certain qu'il existe un moyen plus efficace d'y parvenir et je dois probablement réfléchir à des moyens de décomposer les rapports.
Mise à jour 2: Cela semble être un problème d'environnement de développement. Je lance IE à partir de VS2012 en utilisant la commande d'exécution. Je sens que quelque chose se passe avec le serveur de développement asp.net. Quand je charge le même URL en chrome, pendant le débogage dans vs, il rend en moins d'une seconde.
s'il vous plaît partager votre méthode d'action et votre appel Form et Ajax entier. Il est très difficile de suivre un tel problème sans TOUTES les pièces –