Мне удалось воссоздать одну проблему
phdInput становится пустым
Это было подозрительно, если оно исчезает, должно быть PostBack
в действии. Подозрение возрастает особенно потому, что атрибут phdInput
Visible
установлен в форме false
.
Я полагаю, инициализация формы происходит внутри метода Page_Load
, а один из кодов за строками должен быть установлен phdInput
атрибут Visible
до true
. Тем не менее, phdInput
исчезает после запуска PostBack
, поэтому, возможно, есть проверка
if (!IsPostBack)
Внутри него происходит инициализация, и это правильно, нет необходимости инициализировать ее каждый раз при перезагрузке страницы. Однако
phdInput.Visible = true;
должно быть вне проверки if (!IsPostBack)
, чтобы phdInput
всегда было видно.
Затем что-то запускает PostBack
.
Однако, когда текст изменяется и вы щелкаете за пределами текстового поля или , нажимаете 'Enter' и т. Д. c. , функция не достигается (проверили в VS) и phdInput становится пустым.
Это звучит как TextChanged
событие работает, оно вызывает только какой-то другой обработчик события.
Я надеюсь, что это поможет вам найти решение. Далее следует код, воссоздающий проблему phdInput становится пустым (плохо написано).
.aspx - содержимое тега body
<form id="form1" runat="server">
<div>
<p>start</p>
<asp:PlaceHolder ID="phdHolding" runat="server">
<asp:Label ID="lblWarning" runat="server" Text="" Visible="false" />
<asp:PlaceHolder ID="phdInput" runat="server" Visible="false" >
<h3><asp:Label ID="lblArea" runat="server" Text="Area" /></h3>
</asp:PlaceHolder>
</asp:PlaceHolder>
<p>end</p>
</div>
</form>
код позади
using System;
using System.Web.UI.WebControls;
namespace WebApplication8
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
// row 1
int rownr = Convert.ToInt32(1);
TableRow tr = new TableRow();
tr.VerticalAlign = VerticalAlign.Top;
TableCell tdtype = new TableCell();
tdtype.Text = "table cell 1 text";
tdtype.Width = 250;
tdtype.HorizontalAlign = HorizontalAlign.Left;
tr.Cells.Add(tdtype);
decimal amount = Convert.ToDecimal(1);
TextBox tb = new TextBox(); tb.ID = "txtAmount" + rownr; tb.Width = 70; tb.Text = amount.ToString("N0");
tb.AutoPostBack = true; tb.TextChanged += new EventHandler(UpdateAmounts);
Label lbl = new Label(); lbl.Text = " " + "1";
TableCell tdamount = new TableCell(); tdamount.Controls.Add(tb); tdamount.Controls.Add(lbl);
tr.Cells.Add(tdamount);
// row 2
int rownr2 = Convert.ToInt32(2);
TableRow tr2 = new TableRow();
tr2.VerticalAlign = VerticalAlign.Top;
TableCell tdtype2 = new TableCell();
tdtype2.Text = "table cell 2 text";
tdtype2.Width = 250;
tdtype2.HorizontalAlign = HorizontalAlign.Left;
tr2.Cells.Add(tdtype2);
decimal amount2 = Convert.ToDecimal(2);
TextBox tb2 = new TextBox(); tb2.ID = "txtAmount" + rownr2; tb2.Width = 70; tb2.Text = amount2.ToString("N0");
tb2.AutoPostBack = true; tb2.TextChanged += new EventHandler(UpdateAmounts);
Label lbl2 = new Label(); lbl2.Text = " " + "2";
TableCell tdamount2 = new TableCell(); tdamount2.Controls.Add(tb2); tdamount2.Controls.Add(lbl2);
tr2.Cells.Add(tdamount2);
// table
var table = new Table();
table.Rows.Add(tr);
table.Rows.Add(tr2);
phdInput.Controls.Add(table);
lblWarning.Text = "some warning";
lblArea.Text = "some area text";
lblWarning.Visible = true;
phdInput.Visible = true;
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void UpdateAmounts(object sender, EventArgs e)
{
}
}
}
при открытии страницы
после текстовое поле текст изменяется - либо один