从网页获取用户控件的数据

时间:2012-07-04 09:49:01

标签: c# asp.net user-controls

我在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");


      }

感谢您的帮助,

昆汀

2 个答案:

答案 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_PreRenderEvent该事件中创建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上找到有关delegatesevents的更多信息。



原始回答

除非我错过了什么,否则这是一个非常简单的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