Текстовые поля теряют ценность при обратной передаче
У меня есть около 4 текстовых полей на моей веб-странице... некоторые из них asp: textboxes, а другие - тип ввода = "текст".
входное текстовое поле заполняется с помощью элемента управления календаря javascript, в то время как текстовое поле asp.net заполняется путем ввода. Исходные значения этих текстовых полей извлекаются из базы данных.
Когда пользователь изменяет эти значения, они не сохраняются и текстовые поля очищаются после нажатия кнопки отправки. Пожалуйста, помогите решить эту путаницу. Спасибо.
спасибо за ваш ответ, но он все еще не работает.....
Я поместил этот код в событие загрузки страницы
if (Page.IsPostBack)
{
if (ViewState["stock"] != null)
TextBoxMaterial.Text = ViewState["stock"].ToString();
if (ViewState["supplier"] != null)
TextBoxSupplier.Text = ViewState["supplier"].ToString();
if(ViewState["matTime"] != null)
TextBoxMatTime.Text = ViewState["matTime"].ToString();
if(ViewState["prodTime"] != null)
TextBoxProdTime.Text = ViewState["prodTime"].ToString();
if (ViewState["shipTime"] != null)
TextBoxShipTime.Text = ViewState["shipTime"].ToString();
if(ViewState["cmr"] != null)
cmrDue.Value = ViewState["cmr"].ToString();
if(ViewState["kc"] != null)
kcDue.Value = ViewState["kc"].ToString();
}
а также поместите код ниже в событии onclick для кнопки
ViewState["stock"] = TextBoxMaterial.Text;
ViewState["supplier"] = TextBoxSupplier.Text;
ViewState["matTime"] = TextBoxMatTime.Text;
ViewState["prodTime"] = TextBoxProdTime.Text;
ViewState["shipTime"] = TextBoxShipTime.Text;
ViewState["cmr"] = cmrDue.Value.ToString();
ViewState["kc"] = kcDue.Value.ToString();
string prodLine = DDProdLine.SelectedValue;
string stock1 = DDMaterial.SelectedValue;
string stock2 = ViewState["stock"].ToString();
string supplier = ViewState["supplier"].ToString();
string billet = RBBillet.SelectedValue;
string matTime1 = ViewState["matTime"].ToString();
string matTime2 = DDMatTime.SelectedValue;
string prodTime1 = ViewState["prodTime"].ToString();
string prodTime2 = DDProdTime.SelectedValue;
string shipTime1 = ViewState["shipTime"].ToString();
string shipTime2 = DDShipTime.SelectedValue;
CultureInfo cultureInfo = CultureInfo.CurrentCulture;
string format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToString();
string cmr = ViewState["cmr"].ToString();
string kc = ViewState["kc"].ToString();
string x = cmr.Substring(3, 2);
string y = cmr.Substring(0, 2);
string z = cmr.Substring(6, 4);
string x1 = kc.Substring(3, 2);
string y1 = kc.Substring(0, 2);
string z1 = kc.Substring(6, 4);
string finalCmr = x + "/" + y + "/" + z;
string finalKC = x1 + "/" + y1 + "/" + z1;
DateTime dt = DateTime.ParseExact(finalCmr, format, cultureInfo);
DateTime cr = DateTime.ParseExact(finalKC, format, cultureInfo);
string custDate = dt.ToString("dd/mm/yyyy");
string kcDate = cr.ToString("dd/mm/yyyy");
string id = Request.QueryString["id"];
bool success = true;
TextBoxProdComment1.Text = stock2 + "," + supplier + matTime1 + "," + prodTime1 + "," + shipTime1 + "," + custDate
+ "," + kcDate;
try
{
success = CRTopButtons.SaveProdTable(id, prodLine, stock1, supplier, billet, matTime1, matTime2, prodTime1,
prodTime2, shipTime1, shipTime2, custDate, kcDate);
}
catch (Exception e)
{
TextBoxProdComment2.Text = e.Message;
System.Diagnostics.Trace.Write(e.StackTrace);
}
текстовые поля все еще очищаются, и ни одно из них не является readonly..........
пожалуйста, помогите
Ответы
Ответ 1
У меня была аналогичная проблема, и решение "Потеря данных была изменена javascript во время обратной передачи"
лучше всего описывается в этой статье
Свойство ViewState и Readonly для текстового поля
например, скажем, у нас есть это управление asp.net:
<asp:TextBox ID="txtName" runat="server" EnableViewState= "false" ReadOnly="true" />
если вы измените значение этого элемента управления через javascript на стороне клиента, он не будет распространяться через postback на сервере... что бы вы ни делали с javascript, если вы не удалите readonly = "true". Теперь есть решение этой проблемы, как описано в статье выше.
Проще говоря, это в событии PageLoad
if (!IsPostBack)
txtName.Attributes.Add("readonly","readonly");
и все готово. Просто не забудьте удалить ReadOnly = "true" или Enable = "false", если ваше намерение было отключить элемент управления от редактирования, просто используйте фрагмент выше. Не забудьте удалить Enable = "false", если вы положите его.
Ответ 2
Еще одна вещь, с которой я столкнулся... Если вы используете элемент управления TextBox ASP.NET(например), и он READONLY или DISABLED, postback не поймает измененное значение.
В моей проблеме я менял значение элемента управления через javascript, и даже несмотря на то, что браузер сделал это изменение, после обратной передачи элемент управления все еще сохранил исходное значение.
Кажется, тоже распространенная проблема... javascript запускает пользовательский элемент управления календарем ASCX, а результат вводится javascript в текстовое поле. Пользователям не разрешается напрямую изменять значение текстового поля...
string strDate = Request.Form["id_of_input_element"].ToString();
В конечном итоге я использовал вышеописанное значение um, "reset", после обратной передачи ему было изменено значение!
Ответ 3
-
Текстовые поля <input>
не сохраняют свое состояние после обратной передачи. ASP.NET не обрабатывает это для вас.
-
Если вы поместите код в свое Page_Load событие для установки значений текстовых полей ASP.NET, значения, которые были отправлены назад, не будут сохранены, потому что Page_Load происходит после восстановления дочерних состояний управления в Жизненный цикл страницы ASP.NET. Значения уже восстановлены ASP.NET, но вы перезаписываете их восстановленные значения.
-
Правильная вещь для исправления № 2 - проверить Page.IsPostBack
перед загрузкой исходного состояния, например:
if ( !Page.IsPostBack )
{
// set the textbox initial states from the database
}
UPDATE:
Существует два способа решения проблемы №1. Одна вещь, которую вы можете сделать, - это использовать коллекцию Request.Form [] для извлечения возвращаемого значения вручную, например:
string strDate = Request.Form["id_of_input_element"].ToString();
Другое, что вы могли бы сделать, и это то, что я бы рекомендовал, если вы можете, - изменить элемент <input>
на текстовое поле ASP.NET и подключить к нему любые события Javascript на стороне клиента. Затем ASP.NET полностью обработает вашу обратную передачу.
Ответ 4
Я нашел это, когда искал ответ на тот же тип проблемы, и теперь, когда я нашел свою проблему, я подумал, что это может помочь кому-то еще положить ее сюда.
в моем случае у меня был тег <form>
внутри <form>
моих элементов управления, поэтому, если вы не решили свою проблему с помощью вышеприведенного я sugest поиска <form>
, потерянного внутри вашего <form>
.
надеюсь, что это поможет в некоторых случаях.
Ответ 5
Если я хочу, чтобы вы просили права, я думаю, вы пытаетесь сделать эти текстовые поля только для чтения. Если это так, у меня была эта проблема до этого и она была решена, сделав текстовые поля только с помощью С#, а не ASP.NET, я просто добавил строки, такие как textboxName.Attributes.Add("readonly", "readonly");
в Page_Load, и все получилось просто отлично. Это решение я нашел здесь на fooobar.com/questions/88338/...
Ответ 6
вместо TextBoxPassword.Text=Password
использование
TextBoxPassword.Attributes["value"]=Password
Ответ 7
Кажется, что ваше viewstate отключено. Включите viewstate в директиве страницы.