<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      samesite


      【譯】MVC3 20個秘方-(17)卷簾式分頁

      問題

      今天很多網站與數據庫交互。如果您的網站接收大量的流量,SQL查詢來檢索數據,是相當激烈的。更重要的是因為普通用戶點擊一個在15秒內到達您的網站的鏈接, 檢索和生成內容的工作可能是不必要的,尤其是當內容是“地域折疊”(不滾動是不可見的)。為了幫助解決這個問題,內容將被“按需”載入。足夠的內容將被載入,使頁面感覺起來是隨用戶向下滾動閱讀遞增的,更多的內容將在不影響用戶體驗的場景下填充。

      解決方案

      使用異步controller與jQuery按需加載內容,當用戶開始通過網站的內容滾動時進一步加載內容。

      討論

      異步controller可能在許多MVC應用中未充分利用。最有可能的是因為人們不知道他們,更重要的是,不知道何時使用它們。以下是摘錄見MSDN網站:

      “在應用中,線程饑餓可能會發生,您可以配置action 異步處理。異步請求和同步請求過程需要相同的時間例如,如果一個請求,使得網絡調用需要兩秒鐘來完成的,請求需要兩秒鐘,無論是執行同步或異步。然而,在一個異步調用,當服務器響應等待它的第一次請求時完成時他響應其他的請求沒有被阻塞。因此,當有許多請求調用長時間運行的操作時,異步請求會防止請求排隊。“

      在這個例子里,異步請求是完美的解決方案。因為他會讓IIS服務器有能力去處理更多重要的請求,比如一個新的用戶第一次訪問網站。其中,加載用戶點播內容是不太重要,因為大多數人甚至不關注被加載額外的內容。在一個典型的社交網站,大多數活動可能包含用戶的意見。在以前的秘方中,創建了一個評論的功能。在這個例子中,將更新網站的網頁,列出最近的評論。足夠的評論會被顯示,所以會出現滾動條。一旦用戶開始滾動,一個Ajax請求異步controller將檢索其他評論。

      首先Home/Index view 需要更新去顯示最近的評論。為了提供一些評論的上下文內容,關于書的基礎詳情也將被顯示為導航到圖書的鏈接。所以這個view將簡單的調用view 中的render function會在下邊創建:

       

      @model IEnumerable<MvcApplication.Models.BookComment>
      @{
      ViewBag.Title = "Home Page";
      }
      <h2>@ViewBag.Message</h2>
      <p>
      To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">
      http://asp.net/mvc</a>.
      </p>
      <script type="text/javascript">
      var lastY = 0;
      var currentY = 0;
      var page = 1;
      var maxPages = @ViewBag.maxPages;
      $(window).scroll(
      function () {
      if (page < maxPages) {
      currentY
      = $(window).scrollTop();
      if (currentY - lastY > 200 * (page - 1)) {
      lastY
      = currentY;
      page
      ++;
      $.get(
      'CommentFeed/Comments?page=' + page,
      function(data) {
      $(
      '#comments').append(data);
      });
      }
      }
      });
      </script>
      <div id="comments">
      <h2>
      Recent Comments</h2>
      @Html.Partial("../CommentFeed/Comments", Model)
      </div>

       

      在上面的例子,執行滾動窗口時也有一些比較復雜的JavaScript代碼會執行。一些全局JavaScript變量被定義去保持監控當前的“Y”滾動的位置,最后的“Y”滾動位置和當前被檢索的頁面。當窗口的scrollTop位置減去最后的滾動位置是大于一個具體的數字,通過Ajax檢索新書評論并附加到評論列表。

       

      你將根據你自己的網站去根據矯正那個具體的數字,基于內容的高度,要確保新的內容總是要提前檢索。
      下一步,HomeController需要更新檢索圖書評論列表。 評論在降序排序,以確保最新的創建日期評論首先顯示。為了防止激烈的數據庫負載,全部評論將減少到一個小數目。這應該根據你的網站去調節,以確保有足夠的內容,導致滾動。在下面的例子,建議被限制在3。分頁的最大數也取決于評論總數于除以3。一旦最大的評論數已經返回,最大分頁數是用來防止進一步的Ajax調用。

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.Mvc;
      using System.Globalization;
      using System.Data.Entity;
      using MvcApplication.Models;

      namespace MvcApplication.Controllers
      {
      public class HomeController : Controller
      {
      private BookDBContext db = new BookDBContext();

      public ActionResult Index()
      {
      ViewBag.Message = "Welcome to ASP.NET MVC!";

      // Get our recent comments
      var bookcomments = db.BookComments.Include(b => b.Book).OrderByDescending(b => b.Created).Take(3);
      var count = db.BookComments.Count();
      ViewBag.maxPages = count / 3 + 1;

      return View(bookcomments);
      }

      public ActionResult ChangeLanguage(string language)
      {
      Session["CurrentLanguage"] = new CultureInfo(language);
      return Redirect("Index");
      }

      public ActionResult About()
      {
      return View();
      }

      public ActionResult MobileTest()
      {
      return View();
      }

      public ActionResult MobileTest2()
      {
      return View();
      }
      }
      }

      同樣的功能需要被復制到一個新的異步controller。控制器文件夾選中,右鍵單擊并選擇“添加→控制器。新
      控制器將被命名為CommentFeedController。該控制器不需要腳手架模板功能,下拉,選擇空
      控制器,然后按添加。

      這個控制器會看起來與一個典型的控制器稍有不同。使用異步控制器,一個view將分成兩個函數。第一個函數執行的異步
      請求(例如,檢索的view)。第二個函數接收結果,異步調用和返回或顯示的結果。

      提示:在下面的例子,呈現局部視圖。在某些應用中,它可能是有益的,以減少網絡流量,返回一個JSON結果,讓JavaScript代碼處理與顯示。但是,要簡化這個例子,重點放在異步控制器,前者將用于返回一個partial view。

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.Mvc;
      using MvcApplication.Models;
      using System.Data.Entity;
      namespace MvcApplication.Controllers
      {
      public class CommentFeedController : AsyncController
      {
      private BookDBContext db = new BookDBContext();
      public void CommentsAsync(int page)
      {
      AsyncManager.OutstandingOperations.Increment();
      AsyncManager.Sync(() =>
      {
      var bookcomments = db.BookComments.Include(
      b => b.Book).OrderByDescending(b =>
      b.Created).Skip(page * 3).Take(3);
      AsyncManager.Parameters["bookcomments"] =
      bookcomments;
      AsyncManager.OutstandingOperations.Decrement();
      });
      }
      public ActionResult CommentsCompleted(
      IEnumerable<BookComment> bookcomments)
      {
      return PartialView(bookcomments);
      }
      }
      }



      第一個 函數,CommentsAsync,接收從javascript傳入的當前頁面,并且用這個值去檢索接下來的三個評論。然后通過異步方法,檢索評論并且傳遞一個變量到第二個函數。最終的事是執行AsyncManager.OutstandingOperations.Decrement()方法。OutstandingOperations(未解決操作)的increment(遞增)和decrement(遞減)的匹配是很重要的。否則,當他們不匹配時,sync manager 將取消請求,這可以組織永不休止的請求。

      第二個函數接收book comments 并且返回一個partial view。這和Home/Index view一樣。在這個過程的最后一個步驟是創建partial view。右擊文件夾,添加新文件夾。這個文件夾應該命名為CommentFeed去匹配controller的名字。選擇這個文件夾,右擊,點AddView 命名為Comments-----在添加它之前確定去檢查Partial view。

      @model IEnumerable<MvcApplication.Models.BookComment>
      @foreach (var item in Model) {
      <h3><a href="@Url.Action("Details", "Books", new {ID=item.Book.ID } )">
      @Html.DisplayFor(modelItem => item.Book.Title)
      </a></h3>
      <h4>Comment Posted: @Html.DisplayFor(
      modelItem => item.Created)</h4>
      <p>@MvcHtmlString.Create(Html.Encode(item.Comment).Replace(
      Environment.NewLine, "<br />"))</p>
      }

       

      上邊的view遍歷comments,并首先顯示書的標題和詳細信息頁面的鏈接,然后創建評論的日期,最后創建comment本身。由于View里可能包含換行符,用<br/>替代每個Evironment.NewLine去匹配評論輸入間距。

       

      另請參閱

      Asynchronous controllers

       




      posted @ 2011-12-15 10:13  技術弟弟  閱讀(2932)  評論(18)    收藏  舉報
      主站蜘蛛池模板: 久久99日韩国产精品久久99| 337p日本欧洲亚洲大胆色噜噜 | 高级艳妇交换俱乐部小说 | 亚洲免费的福利片| 小污女小欲女导航| 91精品国产老熟女在线| 成年美女黄网站色大片免费看| 亚洲中文字幕一区二区| 激情五月开心综合亚洲| 大姚县| 国产极品尤物粉嫩在线观看| 99riav国产精品视频| 亚洲综合伊人久久综合| 久久人妻夜夜做天天爽| 国产成人高清亚洲综合| 国内少妇人妻丰满av| 粉嫩一区二区三区国产精品| 在线观看成人年视频免费| 深夜视频国产在线观看| 国产成人午夜福利在线播放| 精品一区二区不卡无码AV| 国内不卡一区二区三区| 天堂va欧美ⅴa亚洲va在线| 91密桃精品国产91久久| 亚洲a免费| 精品无码国产污污污免费| 美女裸体十八禁免费网站| 国产成人精品久久性色av| 又粗又硬又黄a级毛片| 国产乱妇无码大片在线观看| 亚洲欧洲日产国码久在线| 日本中文字幕久久网站| 二区三区亚洲精品国产| 四虎永久免费影库二三区| 狠狠色丁香婷婷亚洲综合| 国厂精品114福利电影免费| 无码av永久免费专区麻豆| 日本中文一区二区三区亚洲| 国产强奷在线播放免费| 国产AV福利第一精品| 国产伦精品一区二区三区妓女下载|