Por que meu formulário Asp.Net chega vazio quando posto de página em página?
Pergunta
Eu tenho o seguinte código HTML
<%@ Page Language="C#" %>
<html>
<head>
<title></title>
</head>
<body>
<form id="frmSystem" method="post" action="target.aspx">
<input id="txtTextField" type="text" />
<input id="btnPost" value="Submit" onclick="javascript:frmSystem.submit();" type="button" />
</form>
</body>
</html>
A página de destino está aparecendo, mas o formulário que ela está recebendo está vazio.Eu tenho um ponto de interrupção na minha página target.aspx e embora eu possa ver um formulário, suas chaves estão vazias e Request["txtTextField"] não me dá nada.
Alguma pista do porquê?
Solução
Se você estiver usando o ASP.NET MVC, os nomes de entrada precisam ser definidos com o atributo "nome" em vez de "id".
Outras dicas
Se você estiver usando ASP.NET 4.5 como eu, use as dicas abaixo
- Desativar URLs amigáveis automaticamente em um projeto de formulário da Web
- configurações.AutoRedirectMode = RedirectMode.Off;// em RouteConfig.cs
- se você puder:
- remova action="CILandingPage.aspx" do elemento do formulário
- coloque um asp:button em vez do botão normal
- definir PostBackUrl="~/CILandingPage.aspx" no seu asp:button
mais recursos com mais detalhes que foram úteis para mim
Você provavelmente redefiniu o valor do formulário nos manipuladores de eventos (como Page_load).
Outra opção é capturar seu request.form [] dados em application_beginRequest no global.asax.cs:
protected void Application_BeginRequest(object sender, EventArgs e)
{
//capture form data and preserve in query string
if (Request.Form["txtTextField"]!= null)
{
Response.Redirect(Request.RawUrl + "?txtTextField="
+ Request.Form["txtTextField"]);
}
//or preserve in Session variable
if(Request.Form["txtTextField"]!=null)
{
Session["txtTextField"]=Request.Form["txtTextField"];
}
}
O problema é que os dados do formulário são perdidos no redirecionamento automático que é aplicado por amigas - se você armazenar esses dados como algo que não for formado dados, é desnecessário desativar o FriendlyUrls ou definir o AutoredirectMode para redirectmode.off.