当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > [c#]asp.ent下开发中Tag的开发技巧

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET 中的 [c#]asp.ent下开发中Tag的开发技巧


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 216 ::
收藏到网摘: n/a

网站开发常用关键字(tag),一般需要获得最多的被采用的Tag,也就是流行词。
通常思路是将关键字tag保存到单独表中,然后在其他表中根据一组id进行对多个关键字进行标识。因为一个文章可以选择多个tag,查询的时候颇为麻烦。
所以我在开发中利用了这样的方法,当然不见得多高明 :),分享下经验。
将tag直接保存在文章的表中,如Tag字段,tag为“c#”和“.net”,则Tag字段值为“c#/.net”就是依/符号分割tag,这样数据库中保存的是字符串了。单文章显示的时候可以直接分割成数组显示,减少表的关联,提高了效率。
当需要显示最近流行词的时候。
查询所有的tag
select tag from 表
利用DataReader把输出结果相加起来。然后根据分隔符转化为字符串,剩下的就是对字符串进行排序,根据tag重多少进行。并返回重复的数量,见代码。为方便查看,我都写在了一个aspx页面中了。
复制代码 代码如下:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="XXXX.BLL" %>
<%@ Import Namespace="XXXX.Model" %>
<%@ Import Namespace="XXXX.DBUtility" %>

<script runat="server">
protected string stext;
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
using (System.Data.SqlClient.SqlDataReader rd = XXXX.DBUtility.SqlHelper.ExecuteReader(SqlHelper.ConnectionString, System.Data.CommandType.Text, "Select Kinds + '/' FROM XXX", null))
{
while (rd.Read())
{
sb.Append(rd.GetString(0));
}
}
stext = sb.ToString();
ToArrayBySort(ToArray(stext, '/'));
}

/// <summary>
/// 将字符串根据分隔符转化为数组
/// </summary>
/// <param name="sourcestring">要转化的字符串</param>
/// <param name="compart">分隔符</param>
/// <returns></returns>
public ArrayList ToArray(string sourcestring, char split)
{
CharEnumerator ce = sourcestring.GetEnumerator();
StringBuilder sb = new StringBuilder();
ArrayList slist = new ArrayList();
while (ce.MoveNext())
{
if (ce.Current != split)
{
sb.Append(ce.Current);
}
else
{
if (string.Empty == sb.ToString()) continue;
slist.Add(sb.ToString());
sb.Remove(0, sb.ToString().Length);
}
}
return slist;
}
public class myComparer : IComparer
{
int IComparer.Compare(Object x, Object y)
{
return ((new CaseInsensitiveComparer()).Compare(((SortItem)y).Count, ((SortItem)x).Count));
}
}
public class SortItem
{
private string itemname;
private int count;
public SortItem()
{
}
public string ItemName
{
get { return itemname; }
set { itemname = value; }
}
public int Count
{
get { return count; }
set { count = value; }
}
}
public System.Collections.Generic.IList<SortItem> ToArrayBySort(ArrayList slist)
{
slist.Sort();
ArrayList sortList = new ArrayList();
foreach (object obj in slist)
{
SortItem sItem = new SortItem();
sItem.ItemName = obj.ToString();
sItem.Count = 1;
if (sortList.Count == 0) { sortList.Add(sItem); continue; }
if (obj.ToString() == ((SortItem)sortList[sortList.Count - 1]).ItemName)
{
sItem.Count = ((SortItem)sortList[sortList.Count - 1]).Count + 1;
sortList.RemoveAt(sortList.Count - 1);
}
sortList.Add(sItem);
}
myComparer myCm = new myComparer();
sortList.Sort(myCm);
System.Collections.Generic.IList<SortItem> iList = new System.Collections.Generic.List<SortItem>();
foreach (object obj in sortList)
{
iList.Add((SortItem)obj);
//Response.Write(((SortItem)obj).ItemName + "-" + ((SortItem)obj).Count.ToString() + "<br />");
}
return iList;
}
</script>