Pourquoi mon formulaire Asp.Net vide arrive quand je poste une page à?
Question
J'ai le code HTML suivant
<%@ 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>
La page cible est à venir, mais la forme qu'il reçoit est vide. J'ai un point d'arrêt sur ma page target.aspx et pendant que je peux voir une forme, c'est les clés sont vides et demande [ « txtTextField »] ne me donne rien.
Un indice pourquoi?
La solution
Si vous utilisez ASP.NET MVC, les noms d'entrée doivent être définis avec l'attribut « name » plutôt que « id ».
Autres conseils
Si vous utilisez ASP.NET 4.5 comme moi, utilisez ci-dessous des notes
- Désactiver auto Friendly URLs dans un projet de formulaire Web
- settings.AutoRedirectMode = RedirectMode.Off; // dans RouteConfig.cs
- si vous pouvez:
- retirer action = "CILandingPage.aspx" de l'élément de forme
- mettre un asp: bouton au lieu de bouton normal
- set PostBackUrl = "~ / CILandingPage.aspx" sur votre asp: bouton
plus de ressources avec plus de détails qui m'a été utile
Vous avez probablement réinitialiser la valeur de formulaire dans les gestionnaires d'événements (tels que page_load).
Une autre option est de capturer vos Request.Form [] données Application_BeginRequest sur les 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"];
}
}
Le problème est que les données de formulaire est perdue sur la redirection automatique qui est appliqué par friendlyUrls -. Si vous stockez les données comme autre chose que des données de formulaire, il est inutile de désactiver friendlyUrls ou mis AutoRedirectMode à RedirectMode.Off