0

我在 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 保持为假。

这是我使用声明更改 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");


      }

感谢您的帮助,

昆汀

4

2 回答 2

1

是的,这是可能的,但是将 UserControl 中的控件公开为Public

于 2012-07-04T09:51:08.263 回答
1

由于新信息而更新

您需要了解ASP.NET 中的事件序列

页面的发生在您的 UserControl...的处理程序Load之前很长时间...因此该属性始终设置为.ClickButton2Validatefalse

你有两个明显的选择(如我所见)......

将创建的内容保留UserControl在您的Page_Load(或者最好将其移动到您的Page_Init,因为这通常是最适合它的地方)。Validate然后将您的财产支票放入Page_PreRender.

或者,在单击 Button2 时Event在您的UserControl该事件中创建一个,并在 Page 中处理该事件。Raise


另一个更新

对于上述两个选项中的第二个,在您的UserControl班级中有以下...

public delegate void ButtonClickedDelegate(object sender, EventArgs e);
public event ButtonClickedDelegate ButtonClicked;

在(设置)调用的Button2_Click方法中......UserControlthis.Validate = true;

ButtonClickedDelegate(sender, e);

在 的Page_InitPage,放置类似...

ctrl1.ButtonClicked += new UCPlan.ButtonClickedDelegate(ctrl1_ButtonClicked);

然后有一个新方法叫做

void ctrl1_ButtonClicked(object sender, EventArgs e)
{
    if (ctrl1.Validate)
    {
        ...
    }
}

请记住,当您控制时,delegate您可以传递任何您想要的信息,包括整个班级。因此,不要调用Validate属性,而是创建所需类的新实例,并将其作为委托参数传递。

您可以在 MSDN上找到有关代表事件的更多信息。



原始答案

除非我错过了什么,否则这是一个非常简单的 ASP.NET 概念......

您可以创建属性和/或方法。

例如,作为财产...

public string MyProperty
{
  get { return "My Property Value"; }
}

或者作为一种方法

public string MyMethod()
{
   return "My Method Value";
}

如果您正在谈论在和包含它UserControl的 ASP.NETPage之间传递值,那么在您的 中Page,您可以简单地调用属性或方法。如果您的控件被调用(例如)myCtrl,那么您可以像...

string prop = myCtrl.MyProperty;
string meth = myCtrl.MyMethod();

(在 AHMED EL-HAROUNY 的精彩评论的后面)
如果您正在谈论将值传递给客户端页面,那么您可以直接在 HTML 标记中使用相同的属性/方法。但是,在这种情况下,属性/方法可以声明为protected而不是public

例如,要显示值...

<%=MyProperty%>

或者

<%=MyMethod()%>

或者,如果您要在 javascript 中使用该值,例如...

var myProp = "<%=MyProperty%>";
于 2012-07-04T10:05:36.117 回答