20 chuong 20 tủ tài liệu bách khoa

30 54 0
20 chuong 20 tủ tài liệu bách khoa

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chapter 20: Views Trong chương 17, bạn thấy cách mà phương thức hoạt động có thẻ trả đối tượng ActionResult Như bạn học, hều hết sử dụng cách thông thường kết qủa hành động ViewResult Như bạn thấy views sử dụng nhiều ví dụ, bạn biết mức độ mà họ làm Trong chương này, tập trung làm rõ ràng kiến thức Tơi bắt đàu việc cho thấy cách mà MVC Framework xử lý ViewResults việc sử dụng công cụ views, bao gồm chứng minh cách tạo công cụ views tuỳ chọn Kế tiếp, mô tả kỹ thuật để làm việc hiệu với Razor View Engine Khi đề cập tới cách tạo sử dụng view phần, hành động phần Razor (nó tất viết thiết yếu dành cho phát triển MVC có hiệu Bảng 20-1 cung cấp tóm tắt dành cho chương Table 20-1: Tóm tắt chương Problem Tạo view tuỳ chọn Giải pháp Thực giao diện IViewEngine Listing 1–8 and IView – 15 Tuỳ biến view Razor Rút từ lớp RazorViewEngine Định nghĩa vùng nội dụng cho sử dụng trình bày Sử dụng phần Razor Áp dụng section trình bày Sử dụng RenderSection RenderBody giúp đỡ 17 – 22 Định nghĩa đoạn tái sử dụng đánh dấu Sử dụng xem riêng phầm 23 – 26 Định nghĩa logic business tái sử dụng Sử dụng hành động 27 – 29 16 Tạo view tuỳ chỉnh Tôi sâu vào chi tiết cuối tạo view tuỳ chọn Bạn không cần phải làm điều cho hầu hết dự án MVC Framework có cơng cụ xem Razor, có cú pháp tơi mơ tả Chương tơi sử dụng cho tất ví dụ sách Tip phiên cũ MVC Framework hỗ trợ tạp view cách sử dụng markup công cụ view ASP.NET Web Forms, lý bạn thấy tài liệu tham khảo để aspx file gỡ lỗi thông báo lỗi Các giá trị việc tạo công cụ view tùy chỉnh để chứng minh làm xử lý yêu cầu pipeline làm việc hoàn thành kiến thức bạn cách MVC Framework hoạt động Điều bao gồm hiểu biết có quyền mà cơng cụ view dịch ViewResult thành đáp ứng cho client Công cụ View thực giao diện IViewEngine, thể Listing 20-1 Listing 20-1 Giao diện IviewEngine rừ MVC Framework namespace System.Web.Mvc { public interface IViewEngine { ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache); ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache); void ReleaseView(ControllerContext controllerContext, IView view); } } Vai trò cơng cụ View dịch u cầu cho views vào đối tượng ViewEngineResult Hai phương pháp giao diện, FindView FindPartialView, thông qua thông số mô tả yêu cầu điều khiển mà xử lý (một đối tượng ControllerContext), tên view layout nó, cho dù công cụ View cho phép sử dụng lại kết trước từ nhớ cache Những phương pháp gọi ViewResult xử lý Phương pháp cuối cùng, ReleaseView, gọi lần xem khơng cần thiết Lưu ý: Sự hỗ trợ MVC Framework để công cụ view thực lớp ControllerActionInvoker, việc thực xây dựng giao diện IActionInvoker, mơ tả Chương 17 Bạn khơng có quyền truy cập tự động tính cơng cụ view bạn thực hành động riêng bạn invoker hay điều khiển nhà máy trực tiếp từ IActionInvoker giao diện IControllerFactory Lớp ViewEngineResult cho phép công cụ view để đáp ứng với MVC Framework view yêu cầu Listing 20 – cho thấy lớp ViewEngineResult Listing 20 – 2: ViewEngineResult Class từ MVC Framework using System.Collections.Generic; namespace System.Web.Mvc { public class ViewEngineResult { public ViewEngineResult(IEnumerable searchedLocations) { if (searchedLocations == null) { throw new ArgumentNullException("searchedLocations"); } SearchedLocations = searchedLocations; } public ViewEngineResult(IView view, IViewEngine viewEngine) { if (view == null) { throw new ArgumentNullException("view");} if (viewEngine == null) { throw new ArgumentNullException("viewEngine");} View = view; ViewEngine = viewEngine; } public IEnumerable SearchedLocations { get; private set; } public IView View { get; private set; } public IViewEngine ViewEngine { get; private set; } } } Bạn thể kết cách chọn constructors Nếu công cụ view cung cấp view cho yêu cầu, sau bạn tạo ViewEngineResult sử dụng constructor này: public ViewEngineResult(IView view, IViewEngine viewEngine) Các tham số để xây dựng thực giao diện IView cơng cụ view (vì mà phương pháp ReleaseView gọi sau này) Nếu công cụ view bạn cung cấp nhìn cho u cầu, sau bạn sử dụng constructor này: public ViewEngineResult(IEnumerable searchedLocations) Các tham số cho phiên bảng liệt kê nơi bạn tìm kiếm để tìm view Thông tin hiển thị cho người sử dụng khơng có view tìm thấy, chứng minh sau Note: Bạn không bạn nghĩ lớp ViewEngineResult chút khó xử Bày tỏ kết cách sử dụng phiên khác lớp constructor phương pháp kỳ lạ không thực phù hợp với phần lại thiết kế MVC Framework Các khối nhà cuối hệ thống công cụ view giao diện IView, thể Listing 20-3 Listing 20 – 3: Các giao diện Iview từ MVC Framework using System.IO; namespace System.Web.Mvc { public interface IView { void Render(ViewContext viewContext, TextWriter writer); } } Một thực Iview ược truyền cho constructor đối tượng ViewEngineResult, sau trả từ phương thức cơng cụ xem Các MVC Framework sau gọi phương thức Render Các tham số ViewContext cung cấp thông tin yêu cầu từ khách hàng đầu từ phương thức hành động Các tham số TextWriter để viết cho client Các đối tượng ViewContext định nghĩa thuộc tính mà cung cấp cho bạn truy cập vào thông tin yêu cầu chi tiết cách MVC Framework xử lý Tơi mơ tả hữu hiệu properties Bảng 20-2 Table 20 -2: Các thuộc tính ViewContext hữu dụng Tên Mơ tả Controller Trả thực thi Icontroller mà xử lý yêu cầu RequestContext Trả chi tiết yêu cầu RouteData Trả liệu định tuyến cho yêu cầu TempData Trả liệu tạm thời kết hợp với yêu cầu View Trả việc thực giao diện IView xử lý yêu cầu Rõ ràng, điều lớp bạn tạo thực giao diện tùy chỉnh ViewBag Trả đối tượng đại diện cho túi xem ViewData Trả từ điển liệu mô hình view, mà có chứa túi xem liệu meta cho mơ hình Xem bảng 20-3 để biết chi tiết Thú vị thuộc tính ViewData, mà trả đối tượng ViewDataDictionary Lớp ViewDataDictionary xác định số đặc tính hữu ích cho phép truy xuất đến mơ hình view, túi view siêu liệu điểm mơ hình Tơi mơ tả hữu hiệu thuộc tính Bảng 20-3 Tên Mô tả Key Trả tập hợp giá trị quan trọng liệu từ điển, mà sử dụng để truy cập vào thuộc tính túi view Model Trả đối tượng mơ hình view cho u cầu ModelMetadata Trả đối tượng ModelMetadata mà sử dụng để phản ánh loại mơ hình ModelState Trả thơng tin tình trạng mơ hình, mà tơi mơ tả chi tiết Chương 25 Như tơi nói trước đó, cách đơn giản để xem cách làm việc nào-IViewEngine, IView, ViewEngineResult phù hợp với nhau, để tạo công cụ view Tôi tạo công cụ xem đơn giản trả loại view View làm cho kết thông tin yêu cầu xem liệu tạo phương thức hành động Cách tiếp cận cho phép chứng minh cách mà công cụ view hoạt động mà không bị sa lầy vào việc phân tích xem mẫu view Chuẩn bị dự án Example Các dự án ví dụ cho phần chương gọi Views tạo cách sử dụng mẫu Empty, kiểm tra tuỳ chọn để thêm vào thư mục core MVC tham khảo Tôi tạo điều kiển Home, bạn thấy Listing 20 – Listing 20 – 4: Nội dung HomeController.cs File using System; using System.Web.Mvc; namespace Views.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "Hello, World"; ViewBag.Time = DateTime.Now.ToShortTimeString(); return View("DebugData"); } public ActionResult List() { return View(); } } } Tôi không tạo view cho dự án tơi thực môẹt công cụ xem tuỳ chọn dựa vào Razor Tạo cộng Iview tuỳ chọn Tôi bắt đầu cách tạo thực cho giao diện Iview Tôi thêm thư mục Infrastructure cho dự án ví dụ tạo file lớp bên đc gọi DebugDataView.cs, thể Listing 20 – Listing 20 – 5: Nội dung DebugDataView.cs using System.IO; using System.Web.Mvc; namespace Views.Infrastructure { public class DebugDataView : IView { public void Render(ViewContext viewContext, TextWriter writer) { Write(writer, " -Routing Data -"); foreach (string key in viewContext.RouteData.Values.Keys) { Write(writer, "Key: {0}, Value: {1}", key, viewContext.RouteData.Values[key]); } Write(writer, " -View Data -"); foreach (string key in viewContext.ViewData.Keys) { Write(writer, "Key: {0}, Value: {1}", key, viewContext.ViewData[key]); } } private void Write(TextWriter writer, string template, params object[] values) { writer.Write(string.Format(template, values) + "

"); } } } View cho thấy sử dụng hai tham số cho phương thức Render ôi lấy giá trị từ ViewContext viết phản hồi cho khách hàng sử dụng TextWriter Đầu tiên viết thông tin định tuyến liệu sau liệu túi view Tip: Các tính xem liệu giữ lại từ phiên trước MVC Framework phát hành trước C # có hỗ trợ cho đối tượng động (mà mô tả Chương 4) Xem liệu tiền chất linh hoạt để túi view khơng sử dụng trực tiếp nữa, trừ viết thực tùy chỉnh IView cung cấp dễ dàng truy cập đến tài sản xác định đối tượng túi xem Tạo thực thi IviewEngine Hãy nhớ mục đích cơng cụ view tạo đối tượng ViewEngineResult chứa IView danh sách nơi họ tìm kiếm nhìn phù hợp Bây tơi có thực IView để làm việc, tơi tạo công cụ view Tôi thêm tập tin gọi lớp DebugDataViewEngine.cs thư mục Infrastructure, nội dung hiển thị Listinh 20 – Listing 20 – 6: Nội dung tập tin DebugDataViewEngine.cs using System.Web.Mvc; namespace Views.Infrastructure { public class DebugDataViewEngine : IViewEngine { public ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) { if (viewName == "DebugData") { return new ViewEngineResult(new DebugDataView(), this); } else { return new ViewEngineResult(new string[] { "No view (Debug Data View Engine)" }); } } public ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) { return new ViewEngineResult(new string[] { "No view (Debug Data View Engine)" }); } public void ReleaseView(ControllerContext controllerContext, Iview view) { // nothing } } } Tôi hỗ trợ view đơn đc gọi DebugData Khi thấy u cầu cho view đó, tơi trở thể thực Iview tuỳ chọn return new ViewEngineResult(new DebugDataView(), this); Nếu thực công cụ view nghiêm trọng hơn, sử dụng hội để tìm kiếm mẫu, có tính đến thiết lập nhớ đệm cung cấp tài khoản đặt Ví dụ đơn giản đòi hỏi thể lớp DebugDataView Nếu nhận yêu cầu cho view khác DebugData, trả ViewEngineResult, này: return new ViewEngineResult(new string[] { "No view (Debug Data View Engine)" }); Giao diện IViewEngine giả định cơng cụ view có nơi cần phải xem xét để tìm view Đây giả định hợp lý, view tập tin thường mẫu lưu trữ file dự án Trong trường hợp này, nơi để tìm kiếm, tơi trả lại vị trí giả mà yêu cầu cho view mà chuyển giao Các công cụ view tùy chỉnh khơng hỗ trợ view phần, trả lại kết từ phương thức FindPartialView cho biết tơi khơng có view để cung cấp Tơi quay trở lại chủ đề view phần cách thức chúng xử lý công cụ Razor sau chương Tôi không thực phương thức ReleaseView, khơng có nguồn tài ngun mà tơi cần giải phóng việc thực tùy chỉnh IView, mục đích thơng thường phương pháp Đăng ký công cụ view tuỳ chọn Tôi đăng ký công cụ view tuỳ chọng phương thức Application_Start Global.asax, thể Listing 20 – Listing 20 – 7: Đăng ký Công cụ View Tuỳ chọn sử sung Global.asax using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using Views.Infrastructure; namespace Views { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); ViewEngines.Engines.Add(new DebugDataViewEngine()); } } } Các sưu tập static ViewEngine.Engines chứa tập hợp công cụ xem cài đặt ứng dụng MVC Framework hỗ trợ ý tưởng số công cụ cài đặt ứng dụng Khi ViewResult xử lý, hành động Invoker có cài đặt cơng cụ view gọi phương thức FindView Các hành động Invoker ngừng gọi phương thức FindView nhận đối tượng ViewEngineResult mà có chứa Iview Điều có nghĩa thứ tự mà công cụ thêm vào ViewEngines.Engines đáng kể hai hay nhiều cơng cụ phục vụ yêu cầu cho tên view Nếu bạn muốn xem view bạn ưu tiên, sau bạn cần chèn vào đầu sưu tập này: ViewEngines.Engines.Insert(0, new DebugDataViewEngine()); Kiểm thử Công cụ View Tơi vị trí để thử nghiệm công cụ view tùy chỉnh Khi ứng dụng bắt đầu, trình duyệt tự động điều hướng đến URL gốc cho dự án, ánh xạ tới hành động Index điều khiển Home Các phương thức hành động sử dụng phương thức View để trả ViewResult mà xác định DebugData view Bạn xem kết điều hình 20-1 Hình 20 – 1: Sử dụng công cụ view tuỳ chon Đây kết phương pháp FindView gọi cho môt view mà tơi xử lý Nếu bạn điều hướng đến /Home/List URL, MVC Framework gọi phương thức Danh sách hành động, kêu gọi Xem phương thức để yêu cầu xem mặc định nó, mà khơng phải hỗ trợ Bạn xem kết hình 20-2 Hình 20 – 2: Yêu cầu view không hỗ trợ Bạn thấy thơng điệp tơi ghi nhận địa điểm tìm kiếm cho view Chú ý Razor ASPX view xuất danh sách tốt Điều công cụ xem sử dụng Nếu muốn đảm bảo có cơng cụ view tùy chỉnh tơi sử dụng, sau tơi phải gọi phương thức Clear trước đăng ký công cụ tập tin Global.asax, thể Listing 20-8 Listing 20 – 8: Loại bỏ công cụ view khác Global.asax File using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using Views.Infrastructure; namespace Views { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new DebugDataViewEngine()); } } } Nếu bạn khởi động lại ứng dụng điều hướng đến /Home/List lại, có cơng cụ view tuỳ chọn sử dụng, hình 20 – Hình 20 – 3: Chỉ sử dụng công cụ view tuỳ chọn rứng dụng ví dụ } } Hãy nhớ invoker hành động vào công cụ view để xem có view tìm thấy Vào thời điểm tơi thêm view sưu tập, có chuẩn Razor View Engine Để tránh cạnh tranh với thực điều đó, tơi gọi phương thức Clear để loại bỏ công cụ view khác đăng ký, sau gọi phương thức Add để đăng ký thực tùy chỉnh Để chứng minh thay đổi địa điểm, tối tạo tập tin /Views/Common thêm vào file views gọi List.cshtml Bạn thấy nội dung tập tin trng Listing 20 – 14 Listing 20 – 14: Nội dung file /Views/Common/List.cshtml @{ ViewBag.Title = "List"; } This is the /Views/Common/List.cshtml View Để hiên thị view, thêm phương thức action Home controller, thể Listing 20 – 15 Listing 20 – 15: Thêm phương thức action file HomeController.cs using System.Web.Mvc; namespace WorkingWithRazor.Controllers { public class HomeController : Controller { public ActionResult Index() { string[] names = { "Apple", "Orange", "Pear" }; return View(names); } public ActionResult List() { return View(); } } } Khi bắt đầu ứng dụng điều hướng tới /Home/List URL, địa điểm tùy chỉnh sử dụng để xác định vị trí file view List.cshtml tập tin /Views/Common, thể hình 20 – Hình 20 – 5: Hảnh hưởng vị trí tùy chỉnh cơng cụ view Thêm vào Dynamic Content cho Razor View Tồn mục đích view phép bạn làm cho phận mơ hình tên miền bạn giao diện người dùng Để làm điều đó, bạn cần thêm nội dung dynamic vào views Nội dung động tạo thời gian chạy, khác cho yêu cầu Điều trái ngược với nội dung tĩnh, HTML, mà bạn tạo bạn viết ứng dụng cho yêu cầu Bạn thêm nội dung động cho view cách khác mô tả Bảng 20-5 Bảng 20-5 Thêm vào nội dung động cho View Kỹ thuật Inline code Nơi sử dụng Sử dụng ít, phần self-contained view logic, chẳng hạn câu lệnh if foreach Đây công cụ để tạo nội dung động view, số phương pháp khác xây dựng Tơi giới thiệu kỹ thuật chương bạn thấy vơ số ví dụ chương HTML helper methods Sử dụng để tạo phần tử HTML đơn sưu tập nhỏ họ, thường dựa mơ hình view giá trị liệu view Các MVC Framework có số phương pháp HTML helper hữu ích, dễ tạo cho riêng bạn Phương thức HTML helper chủ để Chương 21 Sections Sử dụng cho việc tạo phần nội dung đưa vào bố trí địa điểm cụ thể Partial views Sử dụng cho việc chia sẻ phần phụ điểm đánh dấu view Partial views chứa code nội tuyến, phương thức HTML helper, tài liệi tham chiếu tới partial views khác Partial views khơng gọi phương thức action, sử dụng để thực logic business Child actions Sử dụng để tạo giao diện điều khiển thể tái sử dụng vật dụng mà cần phải chứa logic business Khi bạn sử dụng Child actions, gọi phương thức hành động, làm cho view, tiêm vào kết vào dòng phản hồi Hai số options trên, mã nội tuyến phương thức trợ giúp HTML, đề cập nơi khác sách mô tả loại khác phần Sử dụng Layout Sections Các công cụ hỗ trợ Razor khái niệm sections, cho phép bạn để cung cấp cho vùng nội dung bố cục Sections Razor cho kiểm soát tốt phần view chèn vào layout nơi chúng đặt Để chứng minh phần tính năng, tơi chỉnh sửa tập tin /Views/Home/Index.cshtml, thể Listing 20-16 Listing 20-16 Xác định Section File Index.cshtml @model string[] @{ ViewBag.Title = "Index"; Layout = "∼/Views/Shared/_Layout.cshtml"; } @section Header { @foreach (string str in new [] {"Home", "List", "Edit"}) { @Html.ActionLink(str, str, null, new { style = "margin: 5px" }) } } This is a list of fruit names: @foreach (string name in Model) { @name } @section Footer { This is the footer } Phần xác định cách sử dụng tagsection Razor theo sau tên cho chuyên mục Trong danh sách này, tạo phần gọi Header Footer Nội dung phần có chứa hỗn hợp thơng thường thẻ HTML thẻ Razor Phần quy định điểm, áp dụng bố trí với phương phápRenderSection helper Để minh chứng cho cách làm việc này, tạo tập tin /Views/Shared/_Layout.cshtml, nội dung bạn thấy Listing 20-17 Listing 20-17 Sử dụng Sections File _Layout.cshtml div.layout { background-color: lightgray;} div.view { border: thin solid black; margin: 10px 0;} @ViewBag.Title @RenderSection("Header") This is part of the layout @RenderBody() This is part of the layout @RenderSection("Footer") This is part of the layout Tip: Bộ View tùy chọn sử dụng, xác định view cách rõ ràng file Index.cshtml, có nghĩa layout tơi lấy từ thư mục /Views/Shared, view chung đặt tập tin /Views/Common Khi Razor phân tích layout, phương thức helper RenderSection thay nội dung Section view với tên định Các phần view cho khơng kín với section đưa vào layout sử dụng helper RenderBody Bạn xem hiệu section cách khởi động ứng dụng, thể Hình 206 Tơi thêm số kiểu CSS để giúp làm cho rõ ràng mà section đầu từ view từ layout Kết khơng đẹp, gọn gàng chứng tỏ làm bạn đặt vùng nội dung từ điểm vào vị trí cụ thể layout Hình 20-6 Sử dụng Section view để xác định vị trí nội dung layout Note: Một view cần xác định section mà thành phần đề cập layout Các MVC Framework bỏ ngoại lệ bạn cố gắng để xác định section view mà khơng có gọi @RenderSection helper tương ứng layout Sự pha trộn section với phần lại view bất thường Các quy ước để xác định section phần đầu phần cuối view, để làm dễ dàng để xem vùng nội dung đươc xem section bắt lại RenderBody helper Một phương pháp khác mà có xu hướng sử dụng để xác định xem điều khoản section, bao gồn cho toàn phần thân, Listing 20 – 18 Listing 20 – 18: Xác định View điều khoản Razor Section mục Index.cshtml @model string[] @{ ViewBag.Title = "Index"; Layout = "∼/Views/Shared/_Layout.cshtml"; } @section Header { @foreach (string str in new [] {"Home", "List", "Edit"}) { @Html.ActionLink(str, str, null, new { style = "margin: 5px" }) } } @section Body { This is a list of fruit names: @foreach (string name in Model) { @name } } @section Footer { This is the footer } Tôi thấy điều làm cho view rõ ràng giảm nguy nội dung không liên quan bị bắt giữ RenderBody Để sử dụng phương pháp này, phải thay gọi đến helper RenderBody với RenderSection ("Body"), thể Listing 20-19 Listing 20-19 Sử dụng RenderSection ("Body") File _Layout.cshtml div.layout { background-color: lightgray;} div.view { border: thin solid black; margin: 10px 0;} @ViewBag.Title @RenderSection("Header") This is part of the layout @RenderSection("Body") This is part of the layout @RenderSection("Footer") This is part of the layout Kiểm thử cho Sections Bạn kiểm tra thấy view định nghĩa phần cụ thể từ layout Đó cách hữu ích cung cấp nội dung mặc định dành cho section view không cần muốn cung cấp nội dung cụ thể Tôi chỉnh sửa File _Layout.cshtml để kiểm tra thấy Footer section định nghĩa, giống minh họa Listing 20-20 Listing 20-20 Kiểm tra Section định nghĩa _Layout.cshtml File @if (IsSectionDefined("Footer")) { @RenderSection("Footer") } else { This is the default footer } IsSectionDefined trợ giúp cho việc lấy tên section bạn muốn kiểm tra trả giá trị true view bạn trả định nghĩa phần section Trong ví dụ, sử dụng trợ giúp để xác định xem tơi có nên trả vài nội dung mặc định view không định nghĩa phần Footer Trình bày phần tùy chọn Mặc định view có chứa tất sections dành cho có RenderSection gọi layout Nếu sections bị mất, MVC Framework báo cáo ngoại lệ đến người dùng Để chứng minh điều này, thêm RenderSection gọi đến File _Layout.cshtml dành cho section có tên gọi script, giống minh họa Listing 20-21 Section Visual Studio thêm vào layout thành mặc định bạn tạo project MVC sử dụng Template MVC Listing 20-21 Một RenderSection Call dành cho mà (nó) khơng có Corresponding Section _Layout.cshtml File div.layout { background-color: lightgray;} div.view { border: thin solid black; margin: 10px 0;} @ViewBag.Title @RenderSection("Header") This is part of the layout @RenderSection("Body") This is part of the layout @if (IsSectionDefined("Footer")) { @RenderSection("Footer") } else { 546 This is the default footer }@ RenderSection("scripts") This is part of the layout Khi bạn khởi động ứng dụng Razor engine attempts trả layout view, bạn thấy lỗi minh họa 20-7 hình Figgure 20-7 Lỗi minh họa có phần thiếu Bạn sử dụng phương thức IsSectionDefined đến tránh làm lệnh gọi RenderSection dành cho phần (sự) xem không định nghĩa, thêm cách tiếp cận hấp dẫn sử dụng phần tùy chọn, mà (nó) bạn làm truyền giá trị sai bổ sung đến phương thức RenderSection, giống minh họa Listing 20-22 Listing 20-22 Làm Section Optional @RenderSection("scripts", false) Điều tạo phần tùy chọn, nội dung mà (nó) chèn kết xem định nghĩa mà khơng đưa ngoại lệ không Sử dụng xem riêng phần Bạn thường cần sử dụng đoạn thẻ Razor HTML đánh dấu vài vị trí khác ứng dụng Thay lặp lại nội dung, bạn sử dụng (Sự) xem riêng phần, mà (nó) File xem tách biệt mà chứa đoạn thẻ đánh dấu bao gồm (Sự) xem khác Trong phần này, cho thấy bạn cách mà tạo sử dụng (Sự) xem riêng phần, giải thích cách mà họ làm việc, chứng minh kỹ thuật sẵn có dành cho truyền liệu xem đến xem riêng phần Tạo Partial View Tôi khởi động tạo xem riêng phần MyPartial có tên gọi Nhắp phải chuột Views/thư mục chia sẻ, Add lựa chọn Xem từ menu popup Visual Studio hiển thị cửa sổ hộp thoại View Add, mà (nó) bạn có thấy chương trước Tên xem đến MyPartial, Template đến Empty (khơng cần mơ hình) kiểm tra Create giống tùy chọn xem riêng phần, giống minh họa 20-8 hình Figure20-8 Tạo xem riêng phần Nhấp Add Button Visual Studio tạo (sự) xem riêng phần, mà (nó) trống rỗng ban đầu Tôi thêm nội dung minh họa Listing 20-23 Listing 20-23 Nội dung MyPartial.cshtml File This is the message from the partial view @Html.ActionLink("This is a link to the Index action", "Index") Tip: thiết lập nội dung ban đầu dành cho File Cái làm xem riêng phần nội dung (nó chứa đoạn HTML, thay tài liệu HTML tồn bộ, khơng tham chiếu cách bố trí) cách mà sử dụng (mà (nó) mô tả ngay) Một bạn quen thuộc với loại xem khác, bạn sử dụng Add MVC View Page (dao cạo) thiết lập nội dung bạn đòi hỏi (một cách) trực tiếp Tơi muốn chứng minh bạn trộn HTML đánh dấu thẻ Razor xem riêng phần, tơi định nghĩa thơng điệp đơn giản lệnh gọi đến phương thức trợ giúp ActionLink Một xem riêng phần tiêu thụ gọi phương thức trợ giúp Html.Partial từ (sự) xem khác Chứng minh điều này, làm (sự) thay đổi đến ∼/(sự) xem/thông dụng/File xem List.cshtml minh họa Listing 20-24 Listing 20-24 Tiêu thụ Partial View List.cshtml File @{ ViewBag.Title = "List"; 548 Layout = null; }< h3>This is the /Views/Common/List.cshtml View @Html.Partial("MyPartial") Tôi định tên File xem riêng phần không cần mở rộng File Bộ máy xem tìm kiếm xem riêng phần điều tơi định vị trí bình thường, mà có nghĩa /Views/Home /Views/Shared chia sẻ dành cho ví dụ này, từ tơi gọi phương thức Html.Partial xem mà trả dành cho người kiểm sốt Home (tơi thiết lập biến Layout đến trống rỗng điều tơi khơng có định phần định nghĩa File _Layout.cshtml sử dụng sớm chương.) Tip: máy xem dao cạo tìm kiếm xem riêng phần vật tương tự cách mà tìm kiếm xem thường xun (trong ∼/Views/ ∼/Views/Shared) Điều có nghĩa điều bạn tạo phiên xem riêng phần chun mơn hóa điều cụ thể người kiểm soát ghi đè xem tên riêng phần thư mục Shared Điều điều kỳ lạ làm, đất công sử dụng xem riêng phần trả nội dung cách bố trí, tính tiện dụng Bạn thấy hiệu tiêu thụ xem riêng phần khởi động ứng dụng điều hướng đến /Home/List URL, giống minh họa 20-9 hình Listing 20-9 Hiệu tiêu thụ phần xem riêng Đi nghiêng gọi làm đến phương thức trợ giúp ActionLink xem riêng phần lấy thơng tin người kiểm sốt từ yêu cầu mà xử lý Mà có nghĩa định phương thức Index, phần tử tham chiếu đến người kiểm soát Home, từ mà người kiểm soát mà dẫn đến đến xem riêng phần trả Nếu tiêu thụ xem riêng phần xem trả dành cho người kiểm sốt khác, ActionLink tạo tham chiếu đến người kiểm sốt thay cho Tôi nhớ lại viết phương thức trợ giúp HTML chương 21 Sử dụng xem riêng phần định kiểu mạnh mẽ Bạn tạo xem riêng phần định kiểu mạnh mẽ, đối tượng mơ hình xem đường truyền đến sử dụng xem riêng phần trả Chứng minh tính này, tạo xem riêng phần định kiểu mạnh mẽ gọi MyStronglyTypedPartial.cshtml /Views/Shared Lần này, thay sử dụng tùy chọn phần sườn, tơi chọn Add MVC View Page, thiết lập tên đến MyStronglyTypedPartial nhấp Button OK tạo view Giống giải thích phần trước, có khơng có File thân mà biểu thị xem riêng phần, nội dung cách sử dụng ứng dụng Tôi loại bỏ nội dung mặc định mà Visual Studio thêm đến File xem thay với đánh dấu minh họa Listing 2025 Listing 20-25 Nội dung MyStronglyTypedPartial.cshtml File @model IEnumerable This is the message from the partial view 549

    @foreach (string str in Model) {
  • @str
  • }
Tơi sử dụng vòng lặp @foreach Razor đến hiển thị nội dung đối tượng mơ hình xem giống mục danh sách HTML Chứng minh sử dụng xem riêng phần này, cập nhật /Views/Common/List.cshtml, giống minh họa Listing 20-26 Listing 20-26 Tiêu thụ Strongly Typed Partial View List.cshtml File @{ ViewBag.Title = "List"; Layout = null; }< h3>This is the /Views/Common/List.cshtml View @Html.Partial("MyStronglyTypedPartial", new [] {"Apple", "Orange", "Pear"}) Khác từ ví dụ trước tơi truyền đối số bổ sung đến phương thức trợ giúp Partial mà định nghĩa đối tượng mơ hình xem Bạn thấy xem riêng phần định kiểu mạnh mẽ sử dụng khởi động ứng dụng điều hướng đến / /Home/List URL, giống minh họa 20-10 hình 20-10 số liệu Tiêu thụ xem riêng phần định kiểu (một cách) mạnh mẽ Sử dụng hành động Các hành động phương thức hành động gọi từ xem Điều để bạn tránh lặp lại logic người kiểm soát điều bạn muốn sử dụng vài vị trí ứng dụng Các hành động đến hành động giống (Sự) xem riêng phần đến (sự) xem Bạn sử dụng hành động lúc bạn muốn hiển thị vài widget điều khiển liệu mà xuất trang bội số chứa liệu không kể lại đến hành động mà chạy Tơi sử dụng kỹ thuật ví dụ SportsStore bao gồm menu chuyển hướng hướng liệu trang, không cần cần cung cấp liệu chuyển hướng (một cách) trực tiếp từ phương thức hành động Dữ liệu chuyển hướng cung cấp độc lập hành động Tạo Child Action Bất kỳ hành động sử dụng giống hành động Chứng minh tính hành động con, tơi thêm phương thức hành động đến người kiểm soát Home, giống minh họa Listing 20-27 Listing 20-27 Thêm Child Action HomeController.cs File using System; using System.Web.Mvc; namespace WorkingWithRazor.Controllers { public class HomeController : Controller { public ActionResult Index() { string[] names = { "Apple", "Orange", "Pear" }; return View(names); } public ActionResult List() { return View(); } [ChildActionOnly] public ActionResult Time() { return PartialView(DateTime.Now); } } } Phương thức hành động gọi Time trả xem riêng phần gọi phương thức PartialView (mà mô tả chương 17) ChildActionOnly quy cho bảo đảm phương thức hành động gọi giống phương thức từ xem Một phương thức hành động khơng cần có thuộc tính đến sử dụng giống hành động con, tơi có xu hướng sử dụng ngăn chặn phương thức hành động từ gọi kết yêu cầu người dùng Đã định nghĩa phương thức hành động, cần tạo xem riêng phần mà trả hành động gọi Các hành động liên kết điển hình với xem riêng phần, điều không bắt buộc Listing 20-28 cho thấy /Views/Home/Time.cshtml điều tơi tạo dành cho việc giải thích Điều xem riêng phần định kiểu mạnh mẽ mơ hình xem đối tượng DateTime Listing 20-28 Nội dung Time.cshtml File @model DateTime

The time is: @Model.ToShortTimeString()

Mô tả Child Action Các hành động gọi (việc) sử dụng người giúp đỡ Html.Action Với người giúp đỡ này, phương thức hành động thực thi, ViewResult xử lý, đầu tiêm phản ứng đến trình khách Listing 20-29 cho thấy thay đổi làm đến /Views/Common/List.cshtml trả hành động Listing 20-29 Gọi Child Action List.cshtml File @{ ViewBag.Title = "List"; Layout = null; }< h3>This is the /Views/Common/List.cshtml View @Html.Partial("MyStronglyTypedPartial", new [] {"Apple", "Orange", 551 "Pear"}) @Html.Action("Time") Bạn thấy hiệu hành động khởi động ứng dụng điều hướng đến /Home/List URL, giống minh họa 20-11 hình Figure 20-11 Sử dụng hành động Khi gọi người giúp đỡ Action Listing 20-29, cung cấp tham số mà định tên phương thức hành động gọi Điều nguyên nhân MVC Framework tìm kiếm phương thức hành động người kiểm soát mà xử lý yêu cầu hành Gọi phương thức hành động người kiểm soát khác, cung cấp tên người kiểm soát, điều này: @Html.Action("Time", "MyController") Bạn truyền tham số đến phương thức hành động cung cấp đối tượng định kiểu ẩn danh thuộc tính tương xứng đến tên tham số phương thức hành động Nên, ví dụ, tơi có hành động đứa trẻ này: [ChildActionOnly] public ActionResult Time(DateTime time) { return PartialView(time); } then I can invoke it from a view as follows: @Html.Action("Time", new { time = DateTime.Now }) Bản tóm tắt Trong chương này, tơi khảo sát chi tiết hệ thống xem MVC Razor View Engine Bạn thấy cách mà tạo máy xem tùy chỉnh, cách mà tùy biến hành vi máy Razor mặc định kỹ thuật khác sẵn có dành cho chèn nội dung động xem Trong chương tiếp theo, tập trung phương thức trợ giúp, mà giúp đỡ tạo nội dung điều bạn chèn xem bạn ... thông tin định tuyến liệu sau liệu túi view Tip: Các tính xem liệu giữ lại từ phiên trước MVC Framework phát hành trước C # có hỗ trợ cho đối tượng động (mà mô tả Chương 4) Xem liệu tiền chất linh... File _Layout.cshtml để kiểm tra thấy Footer section định nghĩa, giống minh họa Listing 20- 20 Listing 20- 20 Kiểm tra Section định nghĩa _Layout.cshtml File @if (IsSectionDefined("Footer")) {... minh họa 20- 8 hình Figure20-8 Tạo xem riêng phần Nhấp Add Button Visual Studio tạo (sự) xem riêng phần, mà (nó) trống rỗng ban đầu Tôi thêm nội dung minh họa Listing 20- 23 Listing 20- 23 Nội

Ngày đăng: 09/11/2019, 07:20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan