尽管我的代码在PostBack上将其删除,但WebForms仍然使用TextBox
属性重新呈现data-
控件 - 这是我首先不应该做的,因为PostBack进程清除属性。我已尝试清除OnInit
和OnUnload
中的属性,但在离开代码后,它们会以某种方式重新出现。他们只有永远重置TextChanged
事件。
我疯狂地想弄清楚我的web.config中是否有某个缓存设置会阻止ASP.NET正确删除此属性。
供参考,我的代码的相关部分(据我所知):
.aspx JavaScript:
$("[data-confirm]").each(function () {
var alertText = $(this).attr("<%= _data_confirm %>");
$(alertText).dialog({
modal: true,
draggable: false,
resizable: false,
closeOnEscape: false,
title: "Note",
width: 330,
buttons: {
"Continue with Application": function () {
$(this).dialog("close");
}
}
});
});
.aspx.cs C#:
protected override void OnInit(EventArgs e)
{
if (Page.IsPostBack)
{
ClearIraDistributionConfirmation();
}
iraDistribution.TextChanged += iraDistribution_TextChanged;
}
void iraDistribution_TextChanged(object sender, EventArgs e)
{
if (SessionFormData.ConfirmedIraDistribution == false
&& SessionFormData.IraDistribution.HasValue
&& SessionFormData.IraDistribution.Value > 0)
{
iraDistribution.Attributes[_data_confirm] =
"<div>You must submit a copy of the first page of your 2014 federal tax return to verify the rollover amount.</div>";
iraDistribution.Attributes[_aria_live] = "assertive";
SessionFormData.ConfirmedIraDistribution = true;
}
else if (SessionFormData.ConfirmedIraDistribution)
{
ClearIraDistributionConfirmation();
}
}
private void ClearIraDistributionConfirmation()
{
if (SessionFormData.ConfirmedIraDistribution)
{
iraDistribution.Attributes.Clear();
}
}
我已经验证在PostBack周期结束时,iraDistribution
没有设置属性。一旦我的.aspx JS命中了JavaScript的第一行 - 这是我在此处粘贴的JS之前的方式 - iraDistribution
设置了data-confirm
属性。
我错过了什么?
答案 0 :(得分:1)
这个问题的答案是:Page Life Cycle。
我错误地尝试在TextBox
中检查OnInit
时尚未提供的值。 OnUnload
无法正常工作,因为此时已经将值渲染为输出。
我通过重新排序上面的代码并将其移入OnLoadComplete
事件来解决此错误。我的代码现在看起来像(好吧 - 不太像这样,但它缩写为删除与Session交互的代码,我定义的用于提高可读性的函数等):
protected override void OnLoadComplete(EventArgs e)
{
base.OnLoadComplete(e);
if (SessionFormData.ConfirmedIraDistribution)
{
iraDistribution.Attributes.Clear();
}
else if (SessionFormData.ConfirmedIraDistribution == false
&& SessionFormData.IraDistribution.HasValue
&& SessionFormData.IraDistribution.Value > 0)
{
iraDistribution.Attributes[_data_confirm] =
"<div>You must submit a copy of the first page of your 2014 federal tax return to verify the rollover amount.</div>";
iraDistribution.Attributes[_aria_live] = "assertive";
SessionFormData.ConfirmedIraDistribution = true;
}
}
这个故事的寓意:Page Life Cycle会吃你的午餐。