<a href='mlpdf.aspx?id=<%#Eval("id") %>'><asp:Image ID="Image1" runat="server" Width="120px" Height="172px" ImageUrl='<%#Eval("prd_ml_imageurl")%>'/></a>上面的这段我放在了页面中,数据绑定代码在下面,这里主要是想动态的显示数据库中的图片信息。但是错误提示是System.InvalidOperationException: Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。这个是不是image控件不能进行数据绑定?还是必须用其他的?
这是数据绑定的代码
     string mlsql = "Select * from _mlprd where id=(select min(id)from _mlprd)";
        conn.Open();
        OleDbDataAdapter mlda = new OleDbDataAdapter(mlsql, conn);
        DataSet mlds = new DataSet();
        mlda.Fill(mlds);
        Image1.DataBind();
        conn.Close();
各位看看是怎么回事

解决方案 »

  1.   

    把你的html放在FormView中,然后把mlda设置为FormView的数据源,调用这个FormView的DataBind()。Repeater、FormView、GridView、ListView、DropDownList等才是数据绑定控件,其它的必须放在这些控件的内部才能借上力。
      

  2.   

    当你使用绑定表达式时,可以不使用数据绑定表达式。例如:><asp:Image ID="Image1" runat="server" Width="120px" Height="172px" ImageUrl='<%#prd_ml_imageurl%>'/>在页面作用域声明一个变量protected string prd_ml_imageurl;  string mlsql = "Select * from _mlprd where id=(select min(id)from _mlprd)";
      conn.Open();
      OleDbDataAdapter mlda = new OleDbDataAdapter(mlsql, conn);
      DataSet mlds = new DataSet();
      mlda.Fill(mlds);
      这句话应该从mlds中取出值并赋值给变量prd_ml_imageurl
      Image1.DataBind();
      conn.Close();绑定表达式中直接取本页面的变量prd_ml_imageurl,在Image1.DataBind()的时候可以填入到Image1中。
      

  3.   

    普通的绑定表达式写法,可以参考我在另一个帖子中的回复。http://topic.csdn.net/u/20100420/09/823d9fe4-9ec3-4de0-a556-4d032795c4af.html?seed=1785995549&r=64807575但是数据绑定表达式(正如你贴出的错误信息所示的),不是普通的绑定表达式,它运行时要去查找上下文对象(这其实是Page对象里的一个堆栈结构),如果这个堆栈中没有数据可以出栈就会报错。只有那些数据绑定控件才实现了向堆栈中压入数据的操作。
      

  4.   


    我改了下又出现错误了,我把完整代码发来你看看什么原因吧<asp:FormView ID="FormView1" runat="server">                                                                                                                                                                                       
      <div id="str1" style="overflow:hidden;height:172px;width:930px;color:#ff0000">
      
      <table >
      <tr>
    <td id="str2" valign="top" style="width: 700px">
    <table cellpadding="0" cellspacing="0">
      <tr>
     <td><a href='mlpdf.aspx?id=<%#Eval("id") %>'><asp:Image ID="Image1" runat="server" Width="120px" Height="172px" ImageUrl='<%#Eval("prd_ml_imageurl")%>'/></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image2" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/名流五.jpg" /></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image3" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/ml03.gif" /></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image4" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/ml03.gif" /></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image5" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/ml03.gif" /></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image6" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/ml03.gif" /></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image7" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/ml03.gif" /></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image8" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/ml03.gif" /></a></td>
     <td><a href="#" target="_blank"><asp:Image ID="Image9" runat="server" Height="172px" Width="120px" ImageUrl="~/pdf/image/ml03.gif" /></a></td>
              </tr>
                    </table>
                          
                        
                         
                          
                         </td>
                 <td id="str3" valign="top" style="width: 10px"></td>
                   </tr>
                </table>
    </div>
      <script type="text/javascript">
      var speed=15
      str3.innerHTML=str2.innerHTML
      function Marquee(){
      if(str3.offsetWidth-str1.scrollLeft<=0)
      str1.scrollLeft-=str2.offsetWidth
      else{
      str1.scrollLeft++
      }
      }
      var MyMar=setInterval(Marquee,speed)
      str1.onmouseover=function() {clearInterval(MyMar)}
      str1.onmouseout=function() {MyMar=setInterval(Marquee,speed)}
      </script>
    </asp:FormView>
      

  5.   

    FormView不是那样写的,所有代码都是放到某个模板里边,例如ItemTemplate、EditTemplate、FootertEmplate等等。看来你不熟悉数据绑定控件,并且你的绑定也很简单,那么还是使用    protected string prd_ml_imageurl;这样的做法改动最小。
      

  6.   

    例如你首先可以把Eval去掉(不再使用数据控件绑定表达式),然后为在调用 Image1.DataBind() 之前随便为 prd_ml_imageurl 变量赋个值,你就会测试出来Image1的相应属性自动改变成你设置的这个值了。然后再将你从数据库中取得的值赋值给这个变量就可以了。将你的<a href='mlpdf.aspx?id=<%#Eval("id") %>'>加上Runat="server"以及ID属性,可以变为HTML控件(HTML控件也是一种服务器控件),就可以执行DataBind()。当然更好的做法是直接使用Hyperlink控件(这在服务器控件中叫做web控件)。