1

我有一个System.UI.Web.Page包含一个user control.

我想从page to the user control.

据我所知,我必须使用<%# variable %>and DataBind(),显然。

但我找不到任何明确的例子来说明这是如何完成的。

通常,当我使用用户控件时,它看起来像:

<UI:YouTube VideoId="XXXXXXXX" runat="server" />

但是,对于此示例,它将如下所示:

<UI:YouTube VideoId="<%# sYouTubeCode %>" runat="server" />

sYouTubeCode 是public string property页面后面的代码。

aspx page引用后面的AutoEventWireup="false"代码时,如果相关的话。

我什么时候做这个databinding
在页面或用户控件中,它是什么样的?

4

2 回答 2

1

这是一个简单的示例,我认为它说明了您要完成的工作。请注意,<script runat="server">标签中的所有内容都可以放在代码隐藏中,我只是将它们全部放在一个文件中,以便于阅读。

由于您已AutoEventWireup设置为false,因此您需要覆盖该OnInit方法并连接Load事件处理程序。在该Page_Load方法中,您可以将属性的值设置为您想要的任何值(我使用了该MyText属性),然后只需调用DataBind服务器控件(在本例中我使用了一个Literal控件)。

<%@ Page Language="C#" AutoEventWireup="false" %>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal ID="litText" Text="<%# MyText %>" runat="server" />
    </div>
    </form>
</body>
</html>
<script runat="server">
    public string MyText { get; set; }

    private void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            MyText = "some text to databind!";
            litText.DataBind();        
        }
    }

    protected override void OnInit(EventArgs e)
    {
        Load += Page_Load;
        base.OnInit(e);
    }
</script>

FWIW,虽然上面的代码工作正常,但我认为只在Page_Load方法中设置属性,然后放弃<%# %>在首页中更简洁。我觉得在代码隐藏中设置属性是更常见的方法,但显然选择取决于您。

此外,如果您有兴趣,AutoEventWireup="false"可以在 MSDN上找到更多信息。查找标题为“当 AutoEventWireup 属性的值为 false”的部分。

编辑

静态属性也可以正常工作。这是一个示例,Page.DataBind()按照@nunespascal 的建议使用(它也适用于litText.DataBind())。

<%@ Page Language="C#" AutoEventWireup="false" %>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal ID="litText" Text="<%# MyClass.StaticProp %>" runat="server" />
    </div>
    </form>
</body>
</html>
<script runat="server">
    private void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
            Page.DataBind();
    }

    protected override void OnInit(EventArgs e)
    {
        Load += Page_Load;
        base.OnInit(e);
    }

    public class MyClass
    {
        public static string StaticProp { get { return "Static Property"; } }
    }
</script>
于 2013-02-14T06:03:35.617 回答
1

只要您DataBind在页面上调用,就可以随意将值传递给您的用户控件,例如VideoId="<%# sYouTubeCode %>".

你应该收到你的价值观就好了。

请注意,DataBinding 确实发生在生命周期的后期。就在预渲染之前。

在页面上调用DataBind将调用它为页面上的调用控件。在 Page_Load 上调用它应该很好。

于 2013-02-14T06:18:25.590 回答