Pergunta

em nosso site fazemos url reescrever para gerar enormes quantidades de páginas de banco de dados gerado. em cada página, há um controle Login para os usuários. assim:

página aspx Interno: /DB.aspx?id=123 Usuário url visível: /ABC/123.aspx, /ABC/456.aspx ... (url reescrita)

Infelizmente, o tag em cada página tem um atributo de "DB.aspx? Id = 123" ação. quando o usuário clica no botão do navegador está postando /ABC/DB.aspx?id=123 que naturalmente não existe.

Soluções eu tentei: 1. Alterar o atributo de ação por subclasses HtmlForm. isso destrói as todas as outras formas no site. 2. Remova o atributo action (para que o navegador está sempre postando a mesma url). Isso funciona em páginas reescritas, mas em "/" (o default.aspx no diretório root) eu recebo uma mensagem de que o pós verbo não é permitido em "/" (IIS 6 e eu não tenho nenhum controle sobre mapeamentos)

alguém?

Foi útil?

Solução

Verifique neste blog muito bom post de scott gu, http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx .

"Especificamente, você pode tirar vantagem do novo adaptador Controle arquitetura extensibilidade ASP.NET 2.0 para personalizar o processamento do controle, e substituir a sua 'ação valor atributo' com um valor que você fornece. Isso não exige que você alterar qualquer código em suas páginas .aspx "

Verifique a seção:. "Manuseando ASP.NET postagens com Reescrever URL", tenho usado o adaptador ele postou com sucesso

Ps. estar ciente há algumas questões sobre asp.net quando usando url reescrita pelo uso da sessão cookieless, ea url reescrito é mais profunda do que a página original, apenas como o que você tem. (/ ABC / apage vs / db?). A questão é certo no código-fonte do quadro, há soluções alternativas, mas isso é um assunto inteiro (com compensações :( ... você pode querer tê-los no mesmo nível).

Outras dicas

Semântica talvez, mas faz o atributo action = "DB.aspx? Id = 123" ou "/DB.aspx?id=123"? Supondo que sua regravação de URL permite passagem para páginas físicas, isso pode ser o problema.

Eu nunca fiz isso, mas eu vi o código usando reflector e eu acho que você pode corrigi-lo desta maneira:

Na página:

this.Form.Action = null;

ou

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

Se isso não funcionar, basta definir o caminho que você deseja:

this.Form.SetAttribute ( "acção", "ABC / 123.aspx");

Se você atualizar para ASP.NET 3.5 SP1, a propriedade agir é agora devidamente reconhecido e pode ser set de codebehind .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top