怎样把一个绑定数据<%#Eval("value")%>的值传到ascx控件去,需要动态更新的那种,大神们帮忙看看有什么办法没?

解决方案 »

  1.   

    为你的 ascx 定义属性啊。
      

  2.   

    ascx中定义属性就好了。
      

  3.   

    我举个例子吧:
    数据库表中有一列值为一串字符串,是由多个数据拼接而成,在aspx页绑定数据时,使用一个ascx控件来绑定这个字符串拆分出来的数据,而这个数据也得从绑定数据时才能会有,就是这个值咋样才能每次刷新时更新传值不至于报空
      

  4.   

    aspx:
    <asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" Width="100%">
                <ItemStyle Width="260px" />
                <ItemTemplate>
                    <table style="text-align: left" class="tableCss">
                        <tr>
                            <td>题目:<%#DataBinder.Eval(Container.DataItem,"Question")%></td>
                        </tr>
                        <tr>
                            <td>答案:<AN:Answers runat="server" ID="re"  Answer='<%#DataBinder.Eval(Container.DataItem,"Answer")%>'/></td> //这个答案就是所有答案拼接的字符串数据
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:DataList>如上形式,Answer这个属性的绑定数据只有第一次加载才有值,在Answers.ascx中需要对此属性的值进行拆分绑定数据到ascx中的控件上,然后aspx这边引用Answers.ascx这个控件显示的,就是这个值没能即时更新
      

  5.   

    aspx:
    <asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" Width="100%">
                <ItemStyle Width="260px" />
                <ItemTemplate>
                    <table style="text-align: left" class="tableCss">
                        <tr>
                            <td>题目:<%#DataBinder.Eval(Container.DataItem,"Question")%></td>
                        </tr>
                        <tr>
                            <td>答案:<AN:Answers runat="server" ID="re"  Answer='<%#DataBinder.Eval(Container.DataItem,"Answer")%>'/></td> //这个答案就是所有答案拼接的字符串数据
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:DataList>如上形式,Answer这个属性的绑定数据只有第一次加载才有值,在Answers.ascx中需要对此属性的值进行拆分绑定数据到ascx中的控件上,然后aspx这边引用Answers.ascx这个控件显示的,就是这个值没能即时更新
      

  6.   

    参考:
    http://www.cnblogs.com/insus/p/3154363.html
    http://www.cnblogs.com/insus/archive/2011/05/28/2060661.html
    http://www.cnblogs.com/insus/archive/2013/03/08/2950300.html
      

  7.   


    具体问题你还是具体分析。web 是无状态的,而 asp.net 之所以有状态,就是因为基于 ViewState 这个机制。那么你的属性值在页面(随便放一个简单的 Button 按钮进行页面回发)刷新时丢掉了,就要先看看自己有没有 ViewState 持久化,而不要先去看别人有没有给自己传值。举个例子,一个 string 类型的属性,可能是这样的编程结果:public string Name
    {
        get
        {
            var nm = ViewState["name"];
            return (string)nm ?? "无名氏";
        }
        set
        {
            if (Name != value)
            {
                ViewState["name"] = value;
                EnsureChildControls();
                this.Label1.Text.DataBind();
            }
        }
    }
      

  8.   

    我会把重点始终放在主要的测试要点上,我再次给你强调一下“测试自己会不会asp.net 编程设计”的一个基本的测试:在你的 aspx 上随便拖入一个 Button 控件,双击它产生后台处理事件代码,这个事件处理方法内部空着即可。然后你在开发中随时调试时就时不时地点击这个按钮。你会发现界面上任何可见的东西都不会丢,也不会乱!由于这个按钮什么都不做,那么你点击按钮引起页面回发时,你的 DataList1 绝不会去重新读取数据库、重新绑定(这是多么举得性能代价啊,这将会使你的 asp.net 页面变得异常缓慢),其中的所有的 re 用户控件实例也绝不会去重新获取什么 Answer 值。asp.net 知道如何会自动重建控件,因为有了全套 ViewState 机制,所以 asp.net 在 DataList1 的ViewState 中递归地保存了所有足以重建控件形态的数据。如果你发现某个数据需要重新读取数据库、需要重新执行你的赋值代码,那么这就是 asp.net 编程的“外道”了。有些人编写的“示范”代码就会经不起这个简单的 Button 测试,它甚至告诉你在页面刷新时需要整体去重新读取数据库、重新绑定所有控件值、重新给所有的控件传值赋值,这就是错误的“示范”。如果你发现经不起这个简单的 button 测试,应该意识到自己没有学会 asp.net 自身的控件开发和使用原理。而不要从比较简单偷懒的“重新绑定数据”方向去设计你的程序。
      

  9.   

    上面的 demo 代码我改一下public string Name
    {
        get
        {
            EnsureChildControls();
            var nm = ViewState["name"];
            return (string)nm ?? "无名氏";
        }
        set
        {
            EnsureChildControls();
            if (Name != value)
            {
                ViewState["name"] = value;
                pName.DataBind();
            }
        }
    }其中,在 ascx 中需要写 EnsureChildControls() 这是一个知识点,需要使用 ViewState 这是第二个知识点。