Perché il mio Asp.Net Modulo arrivando vuoto quando ho posto da una pagina all'altra?
Domanda
Ho il seguente codice 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>
L'obiettivo pagina è in arrivo, ma la forma che sta ricevendo è vuoto. Ho un punto di rottura sulla mia pagina target.aspx e mentre posso vedere una forma, è tasti sono vuote e Request [ "txtTextField"] mi dà nulla.
Qualsiasi indizio perché?
Soluzione
Se si utilizza ASP.NET MVC, i nomi degli ingressi devono essere impostati con l'attributo "nome", piuttosto che "id".
Altri suggerimenti
Se si utilizza ASP.NET 4.5 come me, usare sotto suggerimenti
- disabilitazione automatica friendly URL in un progetto Web Form
- settings.AutoRedirectMode = RedirectMode.Off; // in RouteConfig.cs
- se puoi:
- rimuovere action = "CILandingPage.aspx" da elemento di modulo
- mettere un asp: tasto al posto del normale pulsante
- set PostBackUrl = "~ / CILandingPage.aspx" sul asp: pulsante
più risorse con più dettaglio che è stato utile per me
Probabilmente si resetta il valore di forma in gestori di eventi (come Page Load).
Un'altra opzione è quella di catturare i vostri [] dati Request.Form in Application_BeginRequest sulle 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"];
}
}
Il problema è che i dati del modulo si perde sul reindirizzamento automatico che viene applicato dal friendlyUrls -. Se si memorizzano i dati come qualcosa di diverso i dati dei moduli, non è necessario spegnere friendlyUrls o impostare AutoRedirectMode a RedirectMode.Off