C# 当querystring为空时,如何对特定类别进行计数?
我在母版页/默认页上有一个菜单,其中列出了x个类别。 我想计算一下每个类别中有多少种产品 例: 香蕉(20) 苹果(8) 草莓(5) 到目前为止,我有:C# 当querystring为空时,如何对特定类别进行计数?,c#,asp.net,master-pages,C#,Asp.net,Master Pages,我在母版页/默认页上有一个菜单,其中列出了x个类别。 我想计算一下每个类别中有多少种产品 例: 香蕉(20) 苹果(8) 草莓(5) 到目前为止,我有: var listSubMenu=\u account.GetAllProductCategories(); var sb=新的StringBuilder(); 对于(int i=0;i
var listSubMenu=\u account.GetAllProductCategories();
var sb=新的StringBuilder();
对于(int i=0;i”,r[“cat_id”]、r[“cat_name”]、count.Rows.count));
}
active_sub_products.Text=sb.ToString();
我的数据表:
公共数据表GetAllProductCategories()
{
常量字符串请求=
@"
从产品类别中选择*
其中cat_活动=1
按类别名称ASC订购
";
使用(var query=newmysqlcommand(请求))
{
返回uu dbConnect.GetData(查询);
}
}
显然,我需要特定的categoryid,但是我如何在不运行QueryString的情况下请求它,因为它位于默认页面上。
我是不是遗漏了什么
非常感谢。您应该循环浏览您的类别并从中获取ID。不是来自querystring,因为它与您的页面相关(正如您自己编写的) 根据您的示例,我希望_account.GetAllProductCategories()会返回您需要的ID 在这种情况下,您可以使用
var catid = listSubMenu.id;
但是id取决于您的帐户返回的内容的类型。如果我在GetAllProductCategories()中对您的结果模式的猜测是正确的 [“猫的id”][“猫的名字”] [1] [苹果] [2] [香蕉] [3] [橙子]
var cat_id = r["cat_id"]
或者可能
var cat_id = Int32.Parse(r["cat_id"])
我也会改变:
sb.AppendFormat(String.Format(@"<li{0}><a href='/account/products.aspx?categoryid={0}'>{1} ({2})</a></li>", r["cat_id"], r["cat_name"], count.Rows.Count));
sb.AppendFormat(String.Format(@“”,r[“cat_id”]、r[“cat_name”]、count.Rows.count));
致:
sb.AppendFormat(String.Format(@“”,cat_id,r[“cat_name”],count.Rows.count));
(有两个变化,(1)对除此之外,我建议您研究类似LinqToSql的ORM,以便您可以直接使用对象…首先在母版页中呈现类别链接: **调用GetAllProductCategories时,结果的每一行将至少有两列(cat_id和cat_name) 当您通过索引(var r=listSubMenu.Rows[i])获取每一行时,它返回的行将具有该记录的cat_id和cat_名称,我添加了(var name=r[“cat_name”])作为说明 如果您对此进行调试并逐步执行,您应该会看到通过for循环的每次迭代都会为id变量提供下一个类别的id,然后在该行中使用该id(var count=\uu account.GetSpecificCategory(id);)
var listSubMenu=\u account.GetAllProductCategories();
var sb=新的StringBuilder();
对于(int i=0;i”,r[“cat_id”]、r[“cat_name”]、count.Rows.count));
}
active_sub_products.Text=sb.ToString();
然后进入实际页面“products.aspx”的另一个文本框或区域
var sbProducts=new StringBuilder();
var selectedCat=Request.QueryString[“categoryid”];
如果(!string.IsNullOrWhitespace(selectedCat))
{
var selectedCatId=Int32.Parse(selectedCat);
var products=\uu account.GetSpecificCategory(selectedCatId);
对于(int j=0;j
**注意:调用Request.QueryString[“value”]时,它将:
**这不是完整的生产质量代码,您应该对查询字符串值进行其他检查,例如,切换到tryparse,检查返回的产品数量并显示“未找到该类别的产品”。。。etc**我认为你们的结构不适合。要准确地了解它,我必须了解“\uuu帐户”是什么,以及您可以使用哪些重要的属性/方法。是的,li{0},只是因为我在回复列表中的css类,没有别的。忘了擦掉那个。关于将r[“cat_id”]替换为cat_id,只有我,用我的手指快速移动抱歉:)隐马尔可夫模型。。。对所问问题的另一种看法。。。您是否正在尝试确定如何确定用户单击的链接,以便您可以显示相应的产品?由于没有querystring值,因此无法查看该链接的工作方式。我需要从我的类别数据库表中检索特定id。我需要对特定类别进行计数。显然,如果querystring有一个值是很容易的,但是因为它在masterpage/defaultpage上,所以它没有。如何补偿querystring值?对GetAllProductCategories()的调用不需要类别Id,因此不需要querystring值。本节在母版页上。第二个代码块不在母版页中,而是在Products.aspx页面中,假设只有当有类别要显示时(即,querystring中的categoryid),您才在Products页面上
sb.AppendFormat(String.Format(@"<li{0}><a href='/account/products.aspx?categoryid={0}'>{1} ({2})</a></li>", r["cat_id"], r["cat_name"], count.Rows.Count));
sb.AppendFormat(String.Format(@"<li><a href='/account/products.aspx?categoryid={0}'>{1} ({2})</a></li>", cat_id, r["cat_name"], count.Rows.Count));
var listSubMenu = __account.GetAllProductCategories();
var sb = new StringBuilder();
for (int i = 0; i < listSubMenu.Rows.Count; i++)
{
var r = listSubMenu.Rows[i];
var id = Int32.Parse(r["cat_id"]);
var name = r["cat_name"];
var count = __account.GetSpecificCategory(id);
sb.AppendFormat(String.Format(@"<li{0}><a href='/account/products.aspx?categoryid={0}'>{1} ({2})</a></li>", r["cat_id"], r["cat_name"], count.Rows.Count));
}
active_sub_products.Text = sb.ToString();
var sbProducts = new StringBuilder();
var selectedCat = Request.QueryString["categoryid"];
if(!string.IsNullOrWhitespace(selectedCat))
{
var selectedCatId = Int32.Parse(selectedCat);
var products = __account.GetSpecificCategory(selectedCatId);
for(int j = 0; j < products.Rows.Count; j++)
{
// ... do product listing stuff here
// sbProducts.Append(...);
}
}
else
{
sbProducts.AppendLine("Invalid Category Id Selected!");
}
active_selected_products.Text = sbProducts.ToString();