这里是.net 2.0,而不是MVC,我是asp表单的废话。
我有一个包含用户控件的页面。当我点击页面中的某些内容时,我想根据页面中的参数加载usercontrol。
我不能这样做。
在我的页面的FaultTree_Clicked中,我得到了值,然后:
我尝试在上面展示一个属性 子用户控件来设置我在FaultTree_Clicked中设置的值, 它被遗忘了。
我尝试将其保存到 会话[“mykey”],并加载 控件中的会话[“mykey”] Page_init ...值为空。
我尝试将其保存到 ViewState [“mykey”],并加载 控件中的ViewState [“mykey”] Page_init ...值为空。
编辑:更具体的信息:
以下是页面(MyFault)的缩减版本:
<form id="form" runat="server">
<div id="faulttree">
<asp:TreeView ID="FaultTree" ......>
</div>
<uc1:_DefectDetail ID="DefectDetail" runat="server" Visible="true" EnableViewState="true" />
</form>
“FaultTree_SelectedNodeChanged()”背后的页面代码有一个方法。
当遇到该方法时,我想加载/显示DefectDetail控件。 DefectControl需要一个faultid,它来自Tree,我成功地进入了SelectedNodeChanged方法。我不能把这个问题变成缺陷控制。
答案 0 :(得分:2)
这与ASP.NET页面生命周期有关。当click事件触发时,控件的init事件已经发生。
为了更好地为您提供帮助,请提供有关FaultTree控件的详细说明,所需结果和示例代码。
<强>更新强>
您可以在控件中创建一个公共方法,而不是公共属性,该方法执行所需操作并从FaultTree_SelectedNodeChangeEvent
调用它。
示例(对于名为Refresh的公共方法):
_DefectDetail.Refresh(object data);
答案 1 :(得分:0)
基本上你必须使用EventHandlers ....
1. Add a event handler to your user control (I had a search bar UscSearchCriteriaBar1)
public event EventHandler CriteriaChanged;
+
private void InternalOnCriteriaChanged()
{
OnCriteriaChanged();
}
+
protected virtual void OnCriteriaChanged()
{
// If there are registered clients raise event
if (CriteriaChanged != null)
CriteriaChanged(this, EventArgs.Empty);
}
+
Example
public int EmployeeID
{
get
{
f (Session["EmployeeID"] != null)
{
ViewState["EmployeeID"] = Convert.ToInt32(Session["EmployeeID"]);
}
if (ViewState["EmployeeID"] == null)
ViewState["EmployeeID"] = 0;
return int.Parse(ViewState["EmployeeID"].ToString());
}
set
{
ctlEmployee.SelectedValue = value.ToString();
ViewState["EmployeeID"] = value;
Session["EmployeeID"] = value;
}
}
In your page or other control
override protected void OnInit(EventArgs e)
{
InitializeComponent();
UscSearchCriteriaBar1.CriteriaChanged += new EventHandler(this.CriteriaChanged);
base.OnInit(e);
}
private void CriteriaChanged(object sender, EventArgs e)
{
try
{
RefreshData();
}
catch (Exception ex)
{
ExceptionManager.Publish(ex);
}
}
You can get UscSearchCriteriaBar1.EmployeeID
这段代码应该给你一些想法......已经完成了1.1应该在2上工作。