【发布时间】:2016-08-12 23:51:24
【问题描述】:
我的网站是 C# 并且是完全动态的。菜单栏也是动态的。每个导航菜单都有子菜单。因为需要从数据库构建菜单,所以我使用了 Listview 控件。在我的菜单网站中,我需要在一个父 Listview 中使用 2 个子 Listview。所以它看起来像这样。
父菜单列表视图有子菜单列表视图和子菜单列表视图有另一个子列表视图,我需要在其中显示任何一个产品相关的父列表视图类别..
我的子菜单已正确构建,但在其中如果我尝试绑定另一个 Listview,则会显示错误(对象引用未设置为对象的实例。)然后我尝试使用手动 sql 查询而没有从 where 子句中获取定义的 ItemDataBound 也显示相同的错误。
我的菜单看起来如何(子菜单中的空白区域(右侧)我想显示一种移动电源类别的产品)
<asp:ListView ID="mainMenu" runat="server" DataKeyNames="name" OnItemDataBound="OnItemDataBound">
<ItemTemplate>
<li><asp:HyperLink ID="mainLinks" runat="server" NavigateUrl='<%# Eval("name", "~/{0}") %>' Text='<%# Eval("name") %>'></asp:HyperLink>
<ul class="super-child">
<asp:ListView ID="childMenu" runat="server" DataKeyNames="name">
<ItemTemplate>
<div class="super-child-inner">
<div class="list-child">
<li><asp:HyperLink ID="cat3" runat="server" NavigateUrl='<%# Eval("category") & Eval("name", "/{0}") %>' Text='<%# Eval("name") %>'></asp:HyperLink></li>
</div>
<div class="recommended">
<asp:ListView ID="recommendedProducts" runat="server">
<ItemTemplate>
<div class="rec-img">
<asp:Image ID="recImg" runat="server" ImageUrl='<%# Eval("image") %>' />
</div>
<p class="rec-name"><asp:HyperLink ID="recLink" runat="server" NavigateUrl='<%# Eval("category") & Eval("name", "/{0}") %>' Text='<%# Eval("name") %>'></asp:HyperLink></p>
</ItemTemplate>
</asp:ListView>
</div>
</div>
</ItemTemplate>
</asp:ListView>
</ul>
</li>
</ItemTemplate>
</asp:ListView>
ItemData绑定代码
protected void onItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem) {
ListViewDataItem itm = (ListViewDataItem)e.Item;
string name = mainMenu.DataKeys(itm.DataItemIndex)("name");
ListView childMenu = e.Item.FindControl("childMenu") as ListView;
ListView recommendedProducts = e.Item.FindControl("recommendedProducts") as ListView;
string constr = ConfigurationManager.ConnectionStrings("conio").ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr)) {
using (MySqlCommand cmd = new MySqlCommand()) {
cmd.CommandText = "SELECT * FROM product_categories WHERE category = '" + name + "' and status = 'active'";
cmd.Connection = con;
using (MySqlDataAdapter sda = new MySqlDataAdapter(cmd)) {
DataTable dt = new DataTable();
sda.Fill(dt);
childMenu.DataSource = dt;
childMenu.DataBind();
}
}
}
try {
string constr2 = ConfigurationManager.ConnectionStrings("conio").ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr2)) {
using (MySqlCommand cmd = new MySqlCommand()) {
cmd.CommandText = "SELECT ID,slug,product_name,image FROM products WHERE (category Like @category) and status = 'active' Limit 1";
cmd.Connection = con;
cmd.Parameters.AddWithValue("@categoty", "%" + name + "%");
using (MySqlDataAdapter sda = new MySqlDataAdapter(cmd)) {
DataTable dt = new DataTable();
sda.Fill(dt);
recommendedProducts.DataSource = dt;
recommendedProducts.DataBind();
}
}
}
} catch (Exception ex) {
Response.Write(ex);
}
}
}
更新(例外)
System.NullReferenceException:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79System.NullReferenceException 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处:对象引用未设置为对象的实例。在 E:\MY WEB\brandstik.com1\MasterPage.master.vb:line 79 中的 MasterPage.onItemDataBound(Object sender, ListViewItemEventArgs e) 处
【问题讨论】:
-
我认为名称有问题 - 在您的 DOM 中
ListViewID 是 =recommendedProduct但您正在尝试将数据绑定到ListView recommendedProducts所以先检查一下。 -
@codelahiru 是的,你是对的,我在那里犯了错误,但我用正确的名称更改了它,但问题仍然存在
-
除了
Object reference not set as an instance of an object.之外还有什么例外吗?这意味着在将数据绑定到该实例之前,您没有从该实例创建任何新对象。 -
@codelahiru 我在我的帖子中发布了整个异常。请看看..
-
@codelahiru 你发现我的代码有什么错误吗?