【发布时间】:2015-03-11 16:21:08
【问题描述】:
WebForms 不断重新渲染带有data- 属性的TextBox 控件,尽管我的代码在 PostBack 上删除了它——我一开始不应该这样做,因为 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 属性。
我错过了什么?
【问题讨论】:
-
通过查看 HTML 或在 JavaScript 中添加是否呈现服务器端应该不难确定(可能需要调试代码以查看其设置位置)...查看源 HTML 和使用设置的信息更新问题。
-
这没有意义。您在这段代码中看到的是完整的循环。对话框 div 是在 C# 中创建的。这里不涉及服务器端 ID。
-
@AlexeiLevenkov,见编辑——我稍微澄清了这个问题。
-
data-confirm 的设置位置并不完全清楚,因为这不是整个页面,是否仅在文本更改事件中设置?
-
是的——那是唯一的地方。编辑:Gads——我忘了输入提交了评论。我已经尝试在回发生命周期的其他时间点设置事件,但无法让它消失。我现在正在重构我在会话中存储确认的方式,看看是否受到影响。
标签: javascript c# jquery asp.net webforms