2008-10-17 6 views
0

J'ai un formulaire Web que j'essaie d'implémenter des listes déroulantes dynamiques sur l'utilisation des extensions .NET AJAX 1.0. J'ai implémenté avec succès les bits nécessaires, mais j'ai une bizarrerie intéressante..NET AJAX 1.0 Aysc Callback modifie l'action de formulaire lors de l'utilisation de Server.Transfer

Lorsque je sélectionne une valeur dans ma première liste déroulante, mon rappel se produit et ma page est mise à jour correctement. La valeur suivante que je sélectionne, je reçois l'erreur suivante:

Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned was: 404

Reguarless de ce contrôle que j'utilise d'abord, les premiers travaux de demande et le second ne fonctionne pas. En regardant mes journaux IIS, je vois les lignes suivantes:

2008-10-17 14:52:14 W3SVC1 127.0.0.1 POST /Aware/Xtend/mParticipant/NewPlannedService.aspx WIN=Participant_1224255079212&Title=Participant 80 - 127.0.0.1 200 0 0

2008-10-17 14:52:20 W3SVC1 127.0.0.1 POST /Aware/mParticipant/NewPlannedService.aspx WIN=Participant_1224255079212&Title=Participant 80 - 127.0.0.1 404 0 0

Comme vous pouvez le voir mon URL de poste a complètement changé. En utilisant Fiddler pour regarder la demande/réponse, je peux voir dans la réponse du serveur:

|formAction||NewPlannedService.aspx|

C'est tout simplement le nom de la page qui est en cours d'exécution, le chemin relatif et la chaîne de requête a été déposé .

Je peux résoudre ce problème en ajoutant ce qui suit à la fin de ma méthode de rappel Async:

this.Form1.Action = Request.Url.PathAndQuery 

Mais cela semble incroyablement boiteux et des odeurs un peu comme du fromage moisi pour moi. Est-ce que quelqu'un peut-il me montrer la bonne direction? Après une inspection plus poussée, j'ai découvert que NewPlannedService.aspx n'était pas la page d'exécution d'origine. Page1.aspx était en cours d'exécution, puis appelé Server.Transfer ("/ folder/NewPlannedService.aspx"). Ainsi, l'URI dans le navigateur était http://whatever.com/Page1.aspx, mais la page réelle qui a été executé http://whatever.com/folder/NewPlannedService.aspx

Répondre

1

Pour résoudre ce problème, j'ai créé un fichier javascript appelé Ajax.Server.Transfer.Fixer.js avec le code suivant:

var orginalFormAction = null; 

//capture the current form action value 
function BeginRequestHandler() { 
    orginalFormAction = theForm.action; 
} 

//set the form action value back to the 
//correct value 
function EndRequestHandler() { 
    theForm.action = orginalFormAction; 
    theForm._initialAction = orginalFormAction; 
} 

function RegisterRequestHandlers() { 

    if (typeof (Sys) != "undefined") { 

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 
    Sys.Application.notifyScriptLoaded(); 

    } 
} 

//register request handlers after the application 
//has successfully loaded. 
Sys.Application.add_load(RegisterRequestHandlers); 

ensuite ajouté la ligne suivante à mon événement Page_Load:

protected void Page_Load(object sender, EventArgs e) 
    { 
     PageScriptManager.Scripts.Add(
     new ScriptReference("~/Script/Ajax.Server.Transfer.Fixer.js") 
     ); 
    } 
Questions connexes