我有一个用户控件,它有一个公共属性(例如 AlarmID),并且该控件包装在div 中,当用户按下页面上的按钮时,在代码隐藏中设置了该用户控件的公共属性。 然后调用 ScriptManager.RegisterStartupScript 以显示一个模式弹出窗口,该弹出窗口是包装该控件的div。
我的问题是,尽管在代码隐藏中我首先设置了该用户控件的公共属性,但是当模式弹出窗口显示该用户控件时,我无法访问该属性
我使用了Control_PreRender和Control_Load事件,但它们都无法在该控件内的标签中显示该属性的正确值。
为了进一步说明,下面是控件代码隐藏中的代码:
protected void Control_Load(object sender, EventArgs e)
{
lblAlarmCode.Text = alarmID.ToString();
}
public int AlarmID
{
get
{
return this.alarmID;
}
set
{
this.alarmID = value;
}
}
我可以捕获该标签正确显示的属性的确切生命周期事件是什么?
谢谢
确保模态附加到页面上的 <form>
元素,否则它根本不会成为页面生命周期的一部分。
作为一个示例,不是说这是您的代码,但我必须使用类似的东西才能在请求中来回<asp:Textbox>
和<asp:Button>
控件
ASPX 代码:
<asp:Panel runat="server" ID="pnlWorkItem">
<fieldset>
<legend></legend>
<label>Job Code</label>
<asp:DropDownList runat="server" ID="ddlJobCode" Width="50%" />
<label>Hours</label>
<asp:TextBox runat="server" ID="txtHours" />
</fieldset>
<fieldset>
<legend></legend>
<p><asp:Button runat="server" ID="btnAddWorkItem" OnClick="btnAddWorkItem_Click" text="Add Work Item" /></p>
</fieldset>
</asp:Panel>
Javascript:
$(function () {
var workItemPanel = $("#<%= pnlWorkItem.ClientID %>");
workItemPanel.hide();
$("#add-work").on("click", function () {
$(workItemPanel).dialog({
width: 450,
height: 300
}).parent().appendTo($("form:first"));
});
});
它会将您的元素追加到 ASP.net 生成的表单元素中,并且应该设置和携带您的属性。
一种解决方案是在setter中设置标签。但是,可能还有其他解决方案,但这种方式只是有效的。