我有一个到DSN的ODBC连接字符串,我们正在尝试打开连接并在数据库上运行SQL select语句。 SQL select语句采用1个参数CartID
。尝试设置传递给select语句的参数值时,浏览器返回错误,提示我的对象引用未设置为对象的实例。
在这里我不确定我的变量是否找不到我的控件“购物车文本框”,或者我没有正确设置变量。
我已尝试更改要查找控件的位置,并尝试写入控制台以检查变量是否已正确设置。两种变化都没有运气。
带有按钮和文本框面板/文本框和按钮进行呼叫的ASPX页面标记:
<asp:Panel ID="ScanCartPanel" runat="server" DefaultButton="ScanCartButton">
<dx:ASPxLabel ID="ScanCartTBLabel" runat="server" Text="Scan a Cart"></dx:ASPxLabel>
<dx:ASPxTextBox ID="ScanCartTB" runat="server" Width="170px"></dx:ASPxTextBox>
<dx:ASPxButton ID="ScanCartButton" runat="server"
Text="Scan Cart" ClientInstanceName="ScanCartID"
OnClick="SendScanCartID" AutoPostBack="False" UseSubmitBehavior="false"></dx:ASPxButton>
</asp:Panel>
<asp:Panel ID="NewCartPanel" runat="server">
<div class="borderd">
<p>This is a new cart!</p>
</div>
</asp:Panel>
后面的C#代码:
protected void SendScanCartID(object sender, EventArgs args)
{
HiddenField ntsh = (HiddenField)Master.FindControl("nothingToSeeHere");
Console.WriteLine(ntsh);
ASPxTextBox cartTextBox = (ASPxTextBox)Master.FindControl("ScanCartTB");
using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectToPoweredPik"].ConnectionString))
{
OdbcCommand cmd = new OdbcCommand("select Cart_Setup from cart_header where cart_id = ?", con);
OdbcParameter CartID = cmd.Parameters.Add("@cart_id", OdbcType.Char);
CartID.Value = cartTextBox.Text;
con.Open();
OdbcDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
if (reader[0].ToString() != "S")
{
NewCartPanel.Style.Add("display", "none");
}
else
{
// show the panel
}
}
}
}
}
面板应始终显示,除非读取器的[0]值为S,则面板将隐藏。现在我无法执行读取器。
答案 0 :(得分:0)
正如Steve的评论所暗示的那样,您可能找不到文本框控件。
您可以通过导航父控件来获取控件。
ContentPlaceHolder MainContent = FindControl("MainContent") as ContentPlaceHolder;
ContentPlaceHolder InnerContent = MainContent.FindControl("somecontrolname") as ContentPlaceHolder;
ASPxTextBoxcartTextBox = (ASPxTextBox)InnerContent.FindControl("ScanCartTB");
钻入适当的命名容器...