加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

以增进保藏夹成果为实例,理会asp.net forums2布局流程及组件计划

发布时间:2018-08-20 16:23:02 所属栏目:电商 来源:站长网
导读:td id=1 class=ControlPanelTabInactive align=center nowrap a href=%=Globals.GetSiteUrls().MyFavorites%%=ResourceManager.GetString(MyFavorites_Title)%/a /td修改: td colspan=11 class=ControlPanelTabLineimg width=1 height=1 alt=/td跨跃列数

td id="1" class="ControlPanelTabInactive" align="center" nowrap>            <a href="<%=Globals.GetSiteUrls().MyFavorites%>"><%=ResourceManager.GetString("MyFavorites_Title")%></a>          </td>修改:  <td colspan=11 class="ControlPanelTabLine"><img width="1" height=1 alt=""></td>跨跃列数五.增进响应文件示意层1,保藏夹主视图在web/user/目次增进MyFavorites.aspx,最终用户页面在ControlsViews目次增进MyFavoritesView.cs,页面视图处事器控件(首要示意为页面处理赏罚逻辑)界面视图:在WebThemesdefault kins中增进View-MyFavorites.ascx 保藏夹视图(首要示意为页面UI)组件在Components目次增进Favorites.cs(相等于营业逻辑层,加s表营业处理赏罚),此例中未在子目次Components/Components中增进Favorite.cs(相等于营业实体层,未加s表实体),因并不必要,完备的Asp.net forums模式应该尚有这一层。示意层2,用户点击保藏按钮后泛起的UI(这个较量简朴)在web目次增进MyFavoritesAdd.aspx文件处理赏罚插手保藏时处事器控件, 在Controls目次增进MyFavoritesAdd.cs(页面处理赏罚逻辑)在WebThemesdefault kins中增进Skin-MyFavoritesAdd.ascx将主题插手保藏时的视图(UI)六.数据库增进表forums_FavoritesUserID    int    4    0ThreadID    int    4    0FavoriteDate    datetime    8    0建设存储进程forums_Favorites_CreateDeleteCREATE  procedure forums_Favorites_CreateDelete(    @UserID int,    @ThreadID int,    @Action int)ASBEGINIF @Action = 0BEGIN    -- Does the user already have the ability to see this thread?    IF EXISTS (SELECT UserID FROM forums_Favorites WHERE UserID = @UserID and ThreadID = @ThreadID)        return    INSERT INTO        forums_Favorites    VALUES        (            @UserID,            @ThreadID,            getdate()        )    RETURNENDIF @Action = 2BEGIN    DELETE        forums_Favorites    WHERE        UserID = @UserID AND        ThreadID = @ThreadID    RETURNENDENDGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO七.数据处理赏罚1.ComponentsProviderForumsDataProvider.cs增进#region 保藏夹        public abstract void CreateFavorites(ArrayList users, int threadID);        public abstract void DeleteFavorites(int userID, ArrayList deleteList);        #endregion2. Data Providers qlDataProvider qlDataProvider.cs增进实现要领#region #### 保藏夹 #### by venjiang 0912        /// <summary>        /// 追加主题到保藏夹        /// </summary>        /// <param name="userID">用户ID</param>        /// <param name="threadID">主题ID</param>        public override void CreateFavorites(int userID,int threadID)         {            using( SqlConnection myConnection = GetSqlConnection() )             {                SqlCommand myCommand = new SqlCommand(databaseOwner + ".forums_Favorites_CreateDelete", myConnection);                myCommand.CommandType = CommandType.StoredProcedure;                myCommand.Parameters.Add("@Action", SqlDbType.Bit).Value = DataProviderAction.Create;                myCommand.Parameters.Add("@UserID", SqlDbType.Int);                myCommand.Parameters.Add("@ThreadID", SqlDbType.Int);                myConnection.Open();                myCommand.Parameters["@UserID"].Value = userID;                myCommand.Parameters["@ThreadID"].Value = threadID;                myCommand.ExecuteNonQuery();            }        }        /// <summary>        /// 从保藏夹中删除主题        /// </summary>        /// <param name="userID">用户ID</param>        /// <param name="deleteList">删除列表</param>        public override void DeleteFavorites(int userID, ArrayList deleteList)         {            // Create Instance of Connection and Command Object            using( SqlConnection myConnection = GetSqlConnection() )             {                SqlCommand myCommand = new SqlCommand(databaseOwner + ".forums_Favorites_CreateDelete", myConnection);                myCommand.CommandType = CommandType.StoredProcedure;                myCommand.Parameters.Add("@Action", SqlDbType.Int).Value = DataProviderAction.Delete;                myCommand.Parameters.Add("@UserID", SqlDbType.Int).Value = userID;                myCommand.Parameters.Add("@ThreadID", SqlDbType.Int);                // Open the connection                myConnection.Open();                // Add multiple times                //                foreach (int threadID in deleteList)                 {                    myCommand.Parameters["@ThreadID"].Value = threadID;                    myCommand.ExecuteNonQuery();                }            }        }        #endregion3.在Data Providers qlDataProvider qlDataProvider.cs修改GetThreads要领,以支持保藏成果#region #### Threads ####        // 增进贴子保藏 by venjiang 0911        public override ThreadSet GetThreads(                int forumID,                 int pageIndex,                 int pageSize,                 int userID,                 DateTime threadsNewerThan,                 SortThreadsBy sortBy,                 SortOrder sortOrder,                 ThreadStatus threadStatus,                 ThreadUsersFilter userFilter,                 bool activeTopics,                bool unreadOnly,                 bool unansweredOnly,                 bool returnRecordCount,                // 增进新参数,是否仅表现保藏的主题                bool favoriteOnly            )        {            // Create Instance of Connection and Command Object            //            using( SqlConnection connection = GetSqlConnection() ) {                SqlCommand command = new SqlCommand(databaseOwner + ".forums_Threads_GetThreadSet", connection);                command.CommandType = CommandType.StoredProcedure;                ThreadSet threadSet             = new ThreadSet();                StringBuilder sqlCountSelect    = new StringBuilder("SELECT count(T.ThreadID) ");                      StringBuilder sqlPopulateSelect = new StringBuilder("SELECT T.ThreadID, HasRead = ");                StringBuilder fromClause        = new StringBuilder(" FROM " + this.databaseOwner + ".forums_Threads T ");                StringBuilder whereClause       = new StringBuilder(" WHERE ");                StringBuilder orderClause       = new StringBuilder(" ORDER BY ");                // 增进保藏判定 by venjiang 0911                if (favoriteOnly == true)                {                    fromClause.Append("," + this.databaseOwner + ".forums_Favorites Fav ");                }                // Ensure DateTime is min value for SQL                //                threadsNewerThan = SqlDataProvider.GetSafeSqlDateTime(threadsNewerThan);                // Construct the clauses                #region Constrain Forums                // Contrain the selectivness to a set of specified forums. The ForumID is our                // clustered index so we want this to be first                if (forumID > 0) {                    whereClause.Append("T.ForumID = ");                    whereClause.Append(forumID);                } else if (forumID < 0) {                    whereClause.Append("(T.ForumID = ");                    // Get a list of all the forums the user has access to                    //                    ArrayList forumList = Forums.GetForums(userID, false, true);                    for (int i = 0; i < forumList.Count; i++) {                        if ( ((Forum) forumList[i]).ForumID > 0 ) {                            if ( (i + 1) < forumList.Count) {                                whereClause.Append( ((Forum) forumList[i]).ForumID + " OR T.ForumID = ");                            } else {                                whereClause.Append( ((Forum) forumList[i]).ForumID );                                whereClause.Append(")");                            }                        }                    }                } else {                    whereClause.Append("T.ForumID = 0 AND P.UserID = ");                    whereClause.Append(userID);                    whereClause.Append(" AND P.ThreadID = T.ThreadID ");                    fromClause.Append(", " + this.databaseOwner + ".forums_PrivateMessages P ");                }                #endregion                #region Constrain Date                whereClause.Append(" AND StickyDate >= '");                whereClause.Append( threadsNewerThan.ToString( System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.SortableDateTimePattern ));                whereClause.Append(" '");                #endregion                #region Constain Approval                whereClause.Append(" AND IsApproved = 1");                #endregion                #region Constrain Read/Unread                if (userID > 0) {                    sqlPopulateSelect.Append("(SELECT " + this.databaseOwner + ".HasReadPost(");                    sqlPopulateSelect.Append(userID);                    sqlPopulateSelect.Append(", T.ThreadID, T.ForumID)) ");                    if (unreadOnly) {                        whereClause.Append(" AND " + this.databaseOwner + ".HasReadPost(");                        whereClause.Append(userID);                        whereClause.Append(", T.ThreadID, T.ForumID) = 0");                    }                } else {                    sqlPopulateSelect.Append("0");                }                #endregion                #region Unanswered topics                if (unansweredOnly) {                    whereClause.Append(" AND TotalReplies = 0 AND IsLocked = 0");                }                #endregion                #region Active topics                // 热点贴子                if (activeTopics) {                    whereClause.Append(" AND TotalReplies > 2 AND IsLocked = 0 AND TotalViews > 50");                }                #endregion                #region 保藏                // 尽表现保藏的主题                if (favoriteOnly)                 {                    whereClause.Append(" AND T.ThreadID = Fav.ThreadID AND Fav.UserID = ");                    whereClause.Append(userID);                }                #endregion                #region Users filter                if (userFilter != ThreadUsersFilter.All)                 {                    if ((userFilter == ThreadUsersFilter.HideTopicsParticipatedIn) || (userFilter == ThreadUsersFilter.HideTopicsNotParticipatedIn)) {                        whereClause.Append(" AND ");                        whereClause.Append(userID);                        if (userFilter == ThreadUsersFilter.HideTopicsNotParticipatedIn)                            whereClause.Append(" NOT");                        whereClause.Append(" IN (SELECT UserID FROM " + this.databaseOwner + ".forums_Posts P WHERE P.ThreadID = T.ThreadID)");                    } else {                        if (userFilter == ThreadUsersFilter.HideTopicsByNonAnonymousUsers)                            whereClause.Append(" AND 0 NOT");                        else                            whereClause.Append(" AND 0");                        whereClause.Append("IN (SELECT UserID FROM " + this.databaseOwner + ".forums_Posts P WHERE ThreadID = T.ThreadID AND P.UserID = 0)");                    }                }                #endregion                #region Thread Status                if (threadStatus != ThreadStatus.NotSet) {                    switch (threadStatus) {                        case ThreadStatus.Open:                            whereClause.Append(" AND ThreadStatus = 0");                            break;                        case ThreadStatus.Closed:                            whereClause.Append(" AND ThreadStatus = 0");                            break;                        case ThreadStatus.Resolved:                            whereClause.Append(" AND ThreadStatus = 0");                            break;                        default:                            break;                    }                }                #endregion                #region Order By                switch (sortBy) {                    case SortThreadsBy.LastPost:                        if (sortOrder == SortOrder.Ascending) {                            if (activeTopics || unansweredOnly)                                orderClause.Append("ThreadDate");                            else                            orderClause.Append("IsSticky, StickyDate");                        } else {                            if (activeTopics || unansweredOnly)                                orderClause.Append("ThreadDate DESC");                        else                            orderClause.Append("IsSticky DESC, StickyDate DESC");                        }                        break;                    case SortThreadsBy.TotalRatings:                        if (sortOrder == SortOrder.Ascending)                            orderClause.Append("TotalRatings");                        else                            orderClause.Append("TotalRatings DESC");                        break;                                case SortThreadsBy.TotalReplies:                        if (sortOrder == SortOrder.Ascending)                            orderClause.Append("TotalReplies");                        else                            orderClause.Append("TotalReplies DESC");                        break;                    case SortThreadsBy.ThreadAuthor:                        if (sortOrder == SortOrder.Ascending)                            orderClause.Append("PostAuthor DESC");                        else                            orderClause.Append("PostAuthor");                        break;                    case SortThreadsBy.TotalViews:                        if (sortOrder == SortOrder.Ascending)                            orderClause.Append("TotalViews");                        else                            orderClause.Append("TotalViews DESC");                        break;                }                #endregion                // Build the SQL statements                sqlCountSelect.Append(fromClause.ToString());                sqlCountSelect.Append(whereClause.ToString());                sqlPopulateSelect.Append(fromClause.ToString());                sqlPopulateSelect.Append(whereClause.ToString());                sqlPopulateSelect.Append(orderClause.ToString());                // Add Parameters to SPROC                //                command.Parameters.Add("@ForumID", SqlDbType.Int).Value = forumID;                command.Parameters.Add("@PageIndex", SqlDbType.Int, 4).Value = pageIndex;                command.Parameters.Add("@PageSize", SqlDbType.Int, 4).Value = pageSize;                command.Parameters.Add("@sqlCount", SqlDbType.NVarChar, 4000).Value = sqlCountSelect.ToString();                command.Parameters.Add("@sqlPopulate", SqlDbType.NVarChar, 4000).Value = sqlPopulateSelect.ToString();                command.Parameters.Add("@UserID", SqlDbType.Int).Value = userID;                command.Parameters.Add("@ReturnRecordCount", SqlDbType.Bit).Value = returnRecordCount;                // Execute the command                connection.Open();                SqlDataReader dr = command.ExecuteReader();                // Populate the ThreadSet                //                while (dr.Read()) {                    // Add threads                    //                    if (forumID == 0)                        threadSet.Threads.Add( ForumsDataProvider.PopulatePrivateMessageFromIDataReader (dr) );                    else                        threadSet.Threads.Add( ForumsDataProvider.PopulateThreadFromIDataReader(dr) );                }                // Do we need to return record count?                //                if (returnRecordCount) {                    dr.NextResult();                    dr.Read();                    // Read the total records                    //                    threadSet.TotalRecords = (int) dr[0];                }                // Get the recipients if this is a request for                // the private message list                if ((forumID == 0) && (dr.NextResult()) ) {                    Hashtable recipientsLookupTable = new Hashtable();                    while(dr.Read()) {                        int threadID = (int) dr["ThreadID"];                        if (recipientsLookupTable[threadID] == null) {                            recipientsLookupTable[threadID] = new ArrayList();                        }                        ((ArrayList) recipientsLookupTable[threadID]).Add(ForumsDataProvider.PopulateUserFromIDataReader(dr) );                    }                    // Map recipients to the threads                    //                    foreach (PrivateMessage thread in threadSet.Threads) {                        thread.Recipients = (ArrayList) recipientsLookupTable[thread.ThreadID];                    }                }                dr.Close();                connection.Close();                return threadSet;            }        }        #endregion八.增进新要领在ComponentsThreads.cs增进新的重载要领,以不必修改原本的要领挪用.// 为了不影响早年的措施,单独加一个重载要领,以得到保藏夹主题        public static ThreadSet GetThreads(int forumID, int pageIndex, int pageSize, int userID, DateTime threadsNewerThan, SortThreadsBy sortBy, SortOrder sortOrder, ThreadStatus threadStatus, ThreadUsersFilter userFilter, bool activeTopics, bool unreadOnly, bool unansweredOnly, bool returnRecordCount,bool favoriteOnly) // 多了一个参数favoriteOnly        {            ForumContext forumContext = ForumContext.Current;            string anonymousKey = "Thread-" + forumID + pageSize.ToString() + pageIndex.ToString() + threadsNewerThan.DayOfYear.ToString() + sortBy + sortOrder + activeTopics.ToString() + unansweredOnly.ToString() + favoriteOnly.ToString();            ThreadSet threadSet;            // If the user is anonymous take some load off the db            //            if (userID == 0)             {                if (forumContext.Context.Cache[anonymousKey] != null)                    return (ThreadSet) forumContext.Context.Cache[anonymousKey];            }            // Create Instance of the IDataProvider            //            ForumsDataProvider dp = ForumsDataProvider.Instance();            // Get the threads            //            threadSet = dp.GetThreads(forumID, pageIndex, pageSize, userID, threadsNewerThan, sortBy, sortOrder, threadStatus, userFilter, activeTopics, unreadOnly, unansweredOnly, returnRecordCount,favoriteOnly);            if (userID == 0)                forumContext.Context.Cache.Insert(anonymousKey, threadSet, null, DateTime.Now.AddMinutes(2), TimeSpan.Zero, CacheItemPriority.Low, null);            return threadSet;        }九.营业逻辑层Components目次中增进Favorites.cs,实现主题的增进删除要领public static void AddFavoritesPost (int userID,int threadID) {            ForumsDataProvider dp = ForumsDataProvider.Instance();            dp.CreateFavorites(userID, threadID);        }        /// <summary>        /// 删除保藏        /// </summary>        /// <param name="userID">用户ID</param>        /// <param name="deleteList">删除列表</param>        public static void DeleteFavorites (int userID, ArrayList deleteList) {            //            ForumsDataProvider dp = ForumsDataProvider.Instance();            dp.DeleteFavorites(userID, deleteList);        }十.示意层挪用1.保藏夹主视图加载保藏主题列表    threadSet = Threads.GetThreads(forumID, pager.PageIndex, pager.PageSize, Users.GetUser().UserID, dateFilterValue, threadSortddl.SelectedValue, sortOrderddl.SelectedValue, ThreadStatus.NotSet, ThreadUsersFilter.All, false, hideReadPosts.SelectedValue, false, true,true);留意最后一个参数是true,即返回保藏夹的数据集。2.增进主题到保藏夹    Favorites.AddFavoritesPost(user.UserID,post.ThreadID);    HttpContext.Current.Response.Redirect(Globals.ApplicationPath+"/MyFavoritesAdd.aspx",true);3.删除保藏的主题    Favorites.DeleteFavorites(…)

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读