2011-05-01 62 views
0

我试图将值传递给数据源中的标签,但它始终向我提供此错误。ASP:未将对象引用设置为对象的实例

form1.aspx:

<asp:FormView ID="ProductsView" DataSourceID="ProductDataSource" DataKeyNames="Parking_ID" 
       runat="server" > 
       <ItemTemplate> 
        <div style="width: 200px; height: 200px; border: solid 10px white; background-position: center; 
         background-repeat: no-repeat; background-image: url('<%# Eval("Parking_ID", "images/{0}.bmp") %>');"> 
        </div> 
        <asp:HiddenField Value='<%# Eval("Parking_Cost") %>' ID="hiddenPrice" runat="server" /> 
        <asp:HiddenField Value='<%# Eval("Parking_Name") %>' ID="hiddenName" runat="server" /> 
        <asp:HiddenField Value='<%# Eval("Parking_ID") %>' ID="HiddenField1" runat="server" /> 
       </ItemTemplate> 
      </asp:FormView> 
      <asp:Label ID="lblName" runat="server" Text="TEST" CssClass="title" Style="font-size: 17px; 
       display: block;"></asp:Label> 
      <asp:Label ID="lblPrice" runat="server" Text="TEST" CssClass="title" Style="color: Red; 
       font-size: 12px;"></asp:Label> 
       <asp:Label ID="lbl_ID" runat="server" Text="" CssClass="title" Style="color: Red; 
       font-size: 12px;"></asp:Label> 
       <asp:SqlDataSource ID="ProductDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:mydatabaseConnectionString2 %>" 
    ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM [Parking] WHERE ([Parking_ID] = @Parking_ID)"> 
    <SelectParameters> 
     <asp:Parameter Name="Parking_ID" Type="Int32" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

form1.aspx.vb:

lblName.Text = DirectCast(Me.ProductsView.FindControl("hiddenName"), HiddenField).Value 

我使用vb.net脚本

任何想法?

问候。

+0

可能的重复[什么是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) – 2011-05-01 22:30:27

回答

1

的控制通常在data row of the FormView是。

尝试

lblName.Text = DirectCast(Me.ProductsView.Row.FindControl("hiddenName"), HiddenField).Value 

但在一般情况下,当你使用Control.FindControl(),有机会的话会返回Nothing,如果它不能找到它。所以最好的办法是做一个TryCast而不是DirectCast并检查它是否是Nothing

1

我猜的误差源是下面的语句:

Me.ProductsView.FindControl("hiddenName") 

其原因是,你没有与"hiddenName"ID直接一个ControlProductsView控制。

您可能需要使用递归函数得到控制..

0

这段代码是否在bind事件中?

lblName.Text = DirectCast(Me.ProductsView.FindControl("hiddenName"), HiddenField).Value 

如果是的话,它可能是你必须检查它正在运行的模板:

if (e.Item.ItemType == ItemType || e.Item.ItemType == AlternateItemType) 

(我不知道该类型FormView的,但在一个GridView它会是这样的。

hiddenName不存在其他模板的控制。

你也必须从e.Item找到当前模板的控件。

相关问题