我在asp.net中有一个简单的问题。 我想知道是否可以直接从我的用户控件中的控件中获取数据。我想这样做而不使用Session变量,Viewstate ...
编辑:我现在使用在UC中声明公共变量的方法。
以下是我父页面的Page_load的一部分:
this.plan_action = (UCPlan)Page.LoadControl("~/Association/UCPlan.ascx");
PlaceHolder1.Controls.Add(this.plan_action);
if (this.plan_action.Validate == true)
{
CheckBox1.Checked = true;
//String référence = Session["liste_action"].ToString();
for (int i = 0; i < this.plan_action.List1.Count; i++)
{
Label8.Text += this.plan_action.List1[i].Référence + "/";
//Label8.Text += "/";
}
}
但我的变量验证保持为假。
以下是我使用声明更改validate变量值的代码:
private bool validate;
public bool Validate
{
get { return validate; }
set { validate = value; }
}
protected void Button2_Click(object sender, EventArgs e)
{
//myCommand.Connection = myConnection;
//Session["liste_action"] = this.List;
this.Validate = true;
//Response.Redirect("../Risques_folder/AjouterRisque.aspx");
}
感谢您的帮助,
昆汀
答案 0 :(得分:1)
是可以的,但是将UserControl中的控件公开为公开。
答案 1 :(得分:1)
更新
您需要了解sequence of events in ASP.NET。
页面的Load
在UserControl中Click
的{{1}}处理程序之前发生了很长时间...因此始终会设置Button2
属性到Validate
。
你有两个明显的选择(我认为)......
继续在false
中创建UserControl
(或者最好将其移至Page_Load
,因为这通常是最合适的地方)。然后在Page_Init
。
Validate
媒体资源
或者,在点击Button2时,在Page_PreRender
,Event
该事件中创建UserControl
,然后在页面中处理该事件。
另一个更新
对于上述两个选项中的第二个,在Raise
班级中有以下内容......
UserControl
在public delegate void ButtonClickedDelegate(object sender, EventArgs e);
public event ButtonClickedDelegate ButtonClicked;
的{{1}}方法中( 设置Button2_Click
)后调用...
UserControl
在this.Validate = true;
的{{1}}中,添加类似......
ButtonClickedDelegate(sender, e);
然后有一个名为
的新方法Page_Init
请记住,当您控制Page
时,您可以传递您想要的任何信息,包括整个班级。因此,不是调用ctrl1.ButtonClicked += new UCPlan.ButtonClickedDelegate(ctrl1_ButtonClicked);
属性,而是创建所需类的新实例,并将其作为委托参数传递。
您可以在MSDN上找到有关delegates和events的更多信息。
原始回答
除非我错过了什么,否则这是一个非常简单的ASP.NET概念...
您可以创建属性和/或方法。
例如,作为财产......
void ctrl1_ButtonClicked(object sender, EventArgs e)
{
if (ctrl1.Validate)
{
...
}
}
或作为方法
delegate
如果您正在讨论在Validate
和包含它的ASP.NET public string MyProperty
{
get { return "My Property Value"; }
}
之间传递值,那么在public string MyMethod()
{
return "My Method Value";
}
中,您可以简单地调用属性或方法。如果您的控件被调用(例如)UserControl
,那么您可以使用......
Page
(在AHMED EL-HAROUNY的评论背后)
如果您正在讨论将值传递到客户端页面,那么您可以直接在HTML标记中使用相同的属性/方法。但是,在这种情况下,属性/方法可以声明为Page
而不是myCtrl
例如,要显示值...
string prop = myCtrl.MyProperty;
string meth = myCtrl.MyMethod();
或者
protected
或者,如果你打算在javascript中使用这个值,比如......
public