我遇到网络表单问题。
我的目标:最初加载页面时,必须将每个文本框加载为空。填写信息并单击提交后,必须提交(UpdatePaymentInfo())
问题:此处,当用户填写信息并单击“提交”时,它甚至会在提交按钮之前调用onload函数,并使所有文本框都为空。
以下是代码:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
string QueryStringupdatecreditcard1 = Request.QueryString.ToString();
if (String.Equals(QueryStringupdatecreditcard1, "tabID=B"))
{
divTitle.Visible = false;
trmain.Visible = false;
tdOrderSummary.Visible = false;
trCCandBilling.Visible = true;
trtest2.Visible = false;
divUpdatecreditcard.Visible = true;
trusecompaddress.Visible = false;
txtFirstName.Text = "";
txtLastName.Text = "";
txtAddress1.Text = "";
txtAddress2.Text = "";
txtCity.Text = "";
txtZip.Text = "";
txtCardNo.Text = "";
txtVccNumber.Text = "";
trAmountCharged.Visible = false;
}
}
protected void imgbtnSubmit_Click(object sender, ImageClickEventArgs e)
{
try
{
UpdatePaymentInfo();
}
}
答案 0 :(得分:9)
将OnLoad方法的当前内容包装在:
if (!Page.IsPostBack)
{
// Code in here will only be executed when the page is *not* being loaded by a postback
}
这是因为,根据ASP.NET Page Life Cyle,您在此实例中关注的事情按此顺序发生:
加载 - 在加载期间,如果当前请求是回发,则控制 属性加载信息 从视图状态和控制中恢复 状态。
回发事件处理 - 如果请求是回发,则控制事件 处理程序被称为。在那之后, 验证所有验证器的方法 调用控件,设置 IsValid个人财产 验证器控件和页面。
所以会发生什么(稍微简化):
正如其他人提到 sort-of 一样,在你这样做时重构你的OnLoad方法并不一定是件坏事。目前你似乎做了两件不同的事情:
可能值得将其分为一个或两个(取决于可见性设置和字段清除是否将独立完成)单独的方法并调整OnLoad方法,使其看起来像这样:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!Page.IsInPostBack)
{
SetFieldVisibility();
ClearFields();
}
}
答案 1 :(得分:3)
Page_Load总是会发生。
上的文档您需要做的是检查Page_Load是否由回发触发。
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
///do stuff in here that you want to occur only on the first lad.
}
else
}
// code that you want to execute only if this IS a postback here.
{
}
// do stuff you want to do on Page_Load regardless of postback here.
}
答案 2 :(得分:1)
您可以使用Page的IsPostBack属性,如下所示:
protected override void OnLoad(EventArgs e) {
if (!Page.IsPostBack) {
EmptyTextBoxes();
}
}
答案 3 :(得分:1)
您是否尝试在检查中包装表单重置代码以查看该页面是否为回发?
if(!Page.IsPostback) {
// Do form reset here
}
答案 4 :(得分:1)
您考虑过使用IsPostBack页面变量吗?
protected override void OnLoad(EventArgs e)
{
if(!IsPostBack){
//all your logic here.
}
}
答案 5 :(得分:0)
如果是这种情况,您可以使用数据绑定控件并将其设置为插入模式