中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET MVC4+BootStrap fix按鈕怎么使用

發布時間:2021-12-06 15:18:24 來源:億速云 閱讀:140 作者:iii 欄目:編程語言

這篇文章主要介紹“ASP.NET MVC4+BootStrap fix按鈕怎么使用”,在日常操作中,相信很多人在ASP.NET MVC4+BootStrap fix按鈕怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ASP.NET MVC4+BootStrap fix按鈕怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

fix按鈕。我們看一下js代碼

$("#btnfix").click(function () {
        $.ajax({
            url: "/Home/SolrDataFix?pam=" + new Date().toTimeString(),
            type: "POST",
            datatype: "Html",
            beforeSend: function () {
                $("#divfix").show();
            },
            complete: function () {
                $("#divfix").hide();
            },
            success: function (data) {
                if (data.IsSuccess) {
                    alert("Fixed successfully!");
                }
                else {
                    alert(data.ErrorMsg);
                }
            },
            error: function () {
                alert("Fix失敗!");
            }
        });
    });

我們fix完成之后會得到一個json格式的數據,我們根據是否成功彈出提示。

接下來我們看看控制器

public JsonResult SolrDataFix()
        {
            int suc = GRLCBiz.GetInstance().FixSolrData();

            if (suc == 1)
            {
                return Json(new { IsSuccess = true }, JsonRequestBehavior.AllowGet);
            }

            return Json(new { IsSuccess = false, ErrorMsg = "Fix failed!" }, JsonRequestBehavior.AllowGet);
        }

在這里,主要是看Biz層的邏輯。其實之前我講過Compare的時候用多線程,那么fix的時候也必然要使用多線程。不過,這次我們要使用的是.net4以上版本中的Task,看代碼

public int FixSolrData()
        {
            if (this.differenceUserEntityList == null) return -1;

            this.movePosition = 0;
            int threadCount = 0;
            int totalCount = differenceUserEntityList.Count;
            threadCount = totalCount % ConstValues.CONN_ComparePerThread == 0 ? totalCount / ConstValues.CONN_ComparePerThread : totalCount / ConstValues.CONN_ComparePerThread + 1;

            if (threadCount > ConstValues.CONN_FixThreadCount)
            {
                threadCount = ConstValues.CONN_FixThreadCount;
            }

            taskList = new List<Task<int>>();

            for (int i = 0; i < threadCount; i++)
            {
                Task<int> task = Task.Factory.StartNew<int>(() =>
                {
                    return SolrDataFixByThread(i);
                });
                taskList.Add(task);
            }

            Task.WaitAll(taskList.ToArray());
            foreach (var task in taskList)
            {
                if (task.Result == -1) return -1;
                break;
            }

            return 1;
        }

這里也是先計算線程數,然后我們循環開啟Task,執行任務,任務是什么呢,就是SolrDataFixByThread方法。這段代碼也是等待所有線程結束以后,我去循環結果,發現如果有某一個線程執行失敗,我就返回-1。OK,我們看一下SolrDataFixByThread這個方法。

private int SolrDataFixByThread(int threadIndex)
        {
            try
            {
                string[] copyUserDBIDList = null;
                while (this.movePosition < this.differenceUserEntityList.Count)
                {
                    lock (this.differenceUserEntityList)
                    {
                        List<string> userIDList = differenceUserEntityList.Select(d => d.UserNo.Trim()).ToList();
                        if (this.movePosition >= this.differenceUserEntityList.Count)
                        {
                            break;
                        }

                        if (this.movePosition <= this.userEntityList.Count - ConstValues.CONN_ComparePerThread)
                        {
                            copyUserDBIDList = new string[ConstValues.CONN_ComparePerThread];
                            userIDList.CopyTo(this.movePosition, copyUserDBIDList, 0, ConstValues.CONN_ComparePerThread);
                        }
                        else
                        {
                            copyUserDBIDList = new string[userEntityList.Count - this.movePosition];
                            userIDList.CopyTo(this.movePosition, copyUserDBIDList, 0, copyUserDBIDList.Length);
                        }

                        this.movePosition += ConstValues.CONN_ComparePerThread;
                    }
                    return this.SolrDataFixStart(copyUserDBIDList, threadIndex);
                }

                return 1;
            }
            catch (Exception ex)
            {
                LogHelper.WriteExceptionLog(MethodBase.GetCurrentMethod(), ex);
                return -1;
            }
        }

和Compare方法大同小異,在此就不多說了。我們看SolrDataFixStart方法

private int SolrDataFixStart(string[] userIDList, int threadIndex)
        {
            string userIDXml = this.BuildUserIDXml(userIDList);
            List<UserDBEntity> userDBEntityList = GRLCDAL.GetInstance().GetUserEntityListByIDs(userIDXml);

            List<UserSolrEntity> userSolrEntityList = userDBEntityList.Select((userDBEntity, userSolrEntity) =>
            {
                userDBEntity.UserID = userDBEntity.UserID ?? string.Empty;
                userDBEntity.UserName = userDBEntity.UserName ?? string.Empty;

                return new UserSolrEntity()
                {
                    UserNo = userDBEntity.UserID,
                    Age = userDBEntity.Age,
                    IsMarried = userDBEntity.Married == "1",
                    Name = userDBEntity.UserName.Trim()
                };
            }).ToList();

            return SolrHelper.GetInstance().AddEntityList(userSolrEntityList.ToList());
        }

第一句,BuildUserIDXml,如下

private string BuildUserIDXml(string[] userIDList)
        {
            XmlDocument xmlDocument = new XmlDocument();
            XmlNode xmlRoot = xmlDocument.CreateElement("UserIDList");
            foreach (var userID in userIDList)
            {
                XmlElement xmlElement = xmlDocument.CreateElement("UserID");
                xmlElement.InnerText = userID;
                xmlRoot.AppendChild(xmlElement);
            }

            return xmlRoot.OuterXml;
        }

構造了一個很簡單的xml格式的數據。然后我們將它傳入DAL層的方法GetUserEntityListByIDs

public List<UserDBEntity> GetUserEntityListByIDs(string userIDXml)
        {
            string sqlScript = string.Empty;
            try
            {
                sqlScript = DBScriptManager.GetScript(this.GetType(), "GetUserInfoByIDs");
                SqlParameter[] sqlParameters =
                {
                    new SqlParameter("@UserIDXml",SqlDbType.Xml)
                };

                sqlParameters[0].Value = userIDXml;
                DataSet ds = SqlHelper.ExecuteDataset(ConstValues.CON_DBConnection, CommandType.Text, sqlScript, sqlParameters);

                if (ds != null && ds.Tables.Count > 0)
                {
                    return ds.Tables[0].ToEntityList<UserDBEntity>();
                }

                return new List<UserDBEntity>();
            }
            catch (Exception ex)
            {
                LogHelper.WriteExceptionLog(MethodBase.GetCurrentMethod(), ex);
                return null;
            }
        }

沒什么可說的,大家注意,這里這個參數是xml類型的,在SqlServer中,當我們要傳遞一批數據進行更新時,往往是傳入一個實體List進行更新,就可以采用xml的方式傳入SP,進行批量處理。OK,我們看一下這個腳本

;WITH UserIDList AS
     (
        SELECT U.C.value(N'(text())[1]','CHAR(25)') AS UserID
        FROM @UserIDXml.nodes(N'UserIDList/UserID') AS U(C)
     )
     
     SELECT
        A.UseNo,
        ISNULL(B.Name,'') AS Name,
        ISNULL(B.Age,0) AS Age,
        ISNULL(B.Temper,'') AS Married
     FROM Bonus.dbo.[User] A WITH(NOLOCK)
     INNER JOIN Bonus.dbo.UerInfo B WITH(NOLOCK)
        ON A.UseNo = B.UseNo
     WHERE EXISTS(
        SELECT TOP 1 1
        FROM UserIDList C
        WHERE C.UserID = A.UseNo
     )

第一句先解析出數據放入一個臨時表UserIDList,大家注意這個臨時表只能在緊跟著的后面的語句中使用,而且只能使用一次就銷毀了。ok,通過這個腳本,我們就拿到了要同步到Solr的數據,開始同步

ASP.NET MVC4+BootStrap fix按鈕怎么使用

同步完成之后,我們看一下Solr數據,linux中的火狐瀏覽器沒有樣式

ASP.NET MVC4+BootStrap fix按鈕怎么使用

我們還是通過windows瀏覽

ASP.NET MVC4+BootStrap fix按鈕怎么使用

OK,Fix一部分數據之后,對比變成下面的樣子

ASP.NET MVC4+BootStrap fix按鈕怎么使用

到此,關于“ASP.NET MVC4+BootStrap fix按鈕怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

奉化市| 炉霍县| 天气| 辽中县| 虎林市| 九江县| 吉水县| 鱼台县| 马龙县| 阜宁县| 江孜县| 建瓯市| 广西| 平顶山市| 芷江| 治县。| 黔东| 盖州市| 上林县| 东乡族自治县| 疏附县| 铁力市| 罗源县| 昭平县| 东莞市| 日土县| 易门县| 成都市| 弥勒县| 宜阳县| 太仓市| 宽甸| 阳山县| 镇平县| 邢台市| 德令哈市| 赤壁市| 竹山县| 牡丹江市| 健康| 巴林右旗|