Question

sur notre site, nous faisons la réécriture d’URL pour générer des quantités massives de pages générées par des bases de données. sur chaque page, il existe un contrôle de connexion pour les utilisateurs. comme ceci:

Page aspx interne: /DB.aspx?id=123 URL visible par l'utilisateur: /ABC/123.aspx, /ABC/456.aspx ... (url réécrite)

Malheureusement, la balise de chaque page a un attribut d'action "DB.aspx? id = 123". lorsque l'utilisateur clique sur le bouton affiché par le navigateur sur /ABC/DB.aspx?id=123, ce qui, bien sûr, n'existe pas.

solutions que j'ai essayées: 1. modifiez l'attribut d'action en sous-classant HtmlForm. cela détruit toutes les autres formes sur le site. 2. Supprimez l'attribut d'action (afin que le navigateur publie toujours dans la même URL). cela fonctionne sur les pages réécrites mais sur " / " (le fichier default.aspx dans le répertoire racine): un message m'indique que la publication du verbe n'est pas autorisée sur " / " (IIS 6 et je n'ai aucun contrôle sur les mappages)

quelqu'un?

Était-ce utile?

La solution

Cochez ce très joli billet de blog de scott gu, http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx .

"Spécifiquement, vous pouvez tirer parti de la nouvelle architecture d'extensibilité ASP.NET 2.0 Control Adapter pour personnaliser le rendu du contrôle et remplacer son" action ". attribuer valeur avec une valeur que vous fournissez. Cela ne vous oblige pas à modifier le code de vos pages .aspx "

.

Consultez la section "Gestion des PostBacks ASP.NET avec la réécriture d'URL", j'ai utilisé l'adaptateur qu'il a publié avec succès.

Ps. Soyez conscient du fait que asp.net pose certains problèmes lors de l'utilisation de la réécriture d'URL lors de l'utilisation d'une session sans cookie, et que l'URL réécrite est plus profonde que la page d'origine, tout comme celle que vous avez. (/ abc / apage vs. / db?). La question se situe tout à fait dans le code source du framework, il existe des solutions de contournement, mais c’est un sujet entier (avec des compromis :( ... vous voudrez peut-être les avoir au même niveau).

Autres conseils

Sémantique peut-être, mais l'action attribut = & DB; aspx? id = 123 " ou "/DB.aspx? id = 123" En supposant que votre réécriture d'URL permette la transmission sur des pages physiques, cela pourrait être votre problème.

Je ne l'ai jamais fait, mais j'ai vu le code à l'aide de Reflector et je suppose que vous pouvez le réparer de cette façon:

Sur la page:

this.Form.Action = null;

ou:

this.Form.SetAttribute("action", null);

Si cela ne fonctionne pas, définissez simplement le chemin souhaité:

this.Form.SetAttribute ("action", "ABC / 123.aspx");

Si vous effectuez une mise à niveau vers ASP.NET 3.5 SP1, la propriété action est maintenant correctement reconnu et peut être défini à partir de codebehind .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top