Почему моя форма Asp.Net остается пустой, когда я публикую сообщения со страницы на страницу?
Вопрос
У меня есть следующий 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>
Целевая страница открывается, но получаемая форма пуста.У меня есть точка останова на моей странице target.aspx, и хотя я вижу форму, ее ключи пусты, и Request["txtTextField"] ничего мне не дает.
Есть подсказки, почему?
Решение
Если вы используете ASP.NET MVC, имена входных данных необходимо задавать с помощью атрибута «name», а не «id».
Другие советы
Если вы, как и я, используете ASP.NET 4.5, используйте приведенные ниже подсказки.
- Отключить автоматические дружественные URL-адреса в проекте веб-формы
- settings.AutoRedirectMode = RedirectMode.Off;// в RouteConfig.cs
- если вы можете:
- удалить action="CILandingPage.aspx" из элемента формы
- поместите кнопку asp: вместо обычной кнопки
- набор PostBackUrl="~/CILandingPage.aspx" на вашей кнопке asp:button
больше ресурсов с более подробной информацией, которая была для меня полезна
Вероятно, вы сбрасываете значение формы в обработчиках событий (например, page_load).
Другой вариант — записать данные Request.Form[] в Application_BeginRequest в 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"];
}
}
Проблема в том, что данные формы теряются при автоматическом перенаправлении, которое применяется с помощью FriendlyUrls. Если вы храните эти данные как нечто иное, чем данные формы, нет необходимости отключать FriendlyUrls или устанавливать для AutoRedirectMode значение RedirectMode.Off.