Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
0,93 MB
Nội dung
CHƯƠNG 17 Bộ điều khiển hành động Mọi yêu cầu mà đến với ứng dụng bạn xử lý điều khiển Bộ điều khiển miễn phí để xử lý yêu cầu cách thấy phù hợp, miễn khơng lạc vào vùng trách nhiệm thuộc mơ hình xem Điều có nghĩa điều khiển không chứa lưu trữ liệu, tạo người sử dụng giao diện Trong ASP.NET MVC Framework, điều khiển lớp NET có chứa logic cần thiết để xử lý yêu cầu Trong chương 3, tơi giải thích vai trò điều khiển để đóng gói ứng dụng bạn Điều có nghĩa điều khiển chịu trách nhiệm fo r xử lý yêu cầu gửi đến, thực hoạt động mơ hình miền, chọn điểm để trả lại cho người sử dụng.Trong chương này, cho bạn cách điều khiển thực cách khác mà bạn sử dụng điều khiển để nhận tạo đầu Bảng 17-1 cung cấp tóm tắt chođiều chương Bảng 17-1 Chương Tổng kết Vá n đè 10 Tạo điều khiển Nhận thông tin yêu cầu Tạo phản ứng từ điều khiển trực tiếp thực giao diện IController Tạo phản ứng từ điều khiển từ lớp điều khiển Cho MVC Framework mọ t cá i nhìn tỏ ng thẻ Truyền liệu từ điều khiển để xem Chuyển hướng trình duyệt tới URL Chuyển hướng trình duyệt tới URL tạo tuyến đường Chuyển hướng trình duyệt tới phương pháp hành động Gửi mã kết HTTP cho trình duyệt Giả i phá p Thực giao diện IController lấy từ lớp điều khiển Sử dụng đối tượng bối cảnh tài sản xác định thông số phương pháp hành động Sử dụng đối tượng bối cảnh HttpResponse Sử dụng kết hành động Xem kết Sử dụng đối tượng xem mơ hình túi xem Sử dụng Redirect Chuyển phương pháp thường trực Use theRedirect To Route or Redirect To Route Permanent methods Sử dụng phương pháp Redirect để hành động 23 10 Quay trở lại Http Tình trạng đối tượng Mã sử dụng phương pháp tiện lợi Http Khơng tìm thấy Chuẩn bị Ví dụ Dự án Để chuẩn bị cho chương này, tạo dự án gọi ControllersAndActions sử dụng mẫu rỗng, kiểm tra tùy chọn cho thư mục MVC tài liệu tham khảo để tạo dự án thử nghiệm đơn vị gọi ControllersAndActions.Tests Các đơn vị kiểm tra sáng tạo chương đừng cần triển khai thực mơ hình tơi đừng cần đến cài đặt Moq đóng hàng, tơi làm cần đến cài đặt MVC gói để tơi kiểm tra có quyền truy cập vào lớp điều khiển Nhập lệnh sau vào Manager Studio NuGet Package trực quan Console: Cài đặt-Package Microsoft.Aspnet.Mvc -version 5.0.0 ControllersAndActions.Tests projectname Thiết lạ p URL Một bạn tạo dự án, chọn Properties từ ControllersAndActions Visual Studio Dự án menu, chuyển sang Web tab kiểm tra Cụ trang Tùy chọn Bắt đầu hành động mục Bạn không cần phải cung cấp giá trị, cần kiểm tra Tùy chọn Giới thiệu Người điều khiển Bạn thấy việc sử dụng điều khiển gần tất chương Bây thời gian để có bước trở lại nhìn đằng sau hậu trường Tạo điều khiển với IControlle r Trong MVC Framework, lớp điều khiển phải thực giao diện IController từ System.Web.Mvc không gian tên, mà thể Liệt kê 17-1 Bảng liệt kê 17-1 Các System.Web.Mvc.IController Interfac e giao diện công cộng IController { khoảng trống Execute (RequestContext requestContext); } Đấm nhận định nghĩa giao diện cách tải mã nguồn MVC Framework, mà vô tận hữu ích cho việc tìm cách thức làm việc phía sau Bạn tải mãnguồn từ http://aspnet.codeplex.com Đây giao diện đơn giản Các phương pháp nhất, Thực hiện, gọi yêu cầu mục tiêu lớp điều khiển Các MVC Framework biết mà điều khiển lớp học nhắm mục tiêu vào yêu cầu đọc giá trị tài sản điều khiển tạo liệu định tuyến, thông qua lớp học định tuyến tùy chỉnh bạn mơ tả Chương 15 16 Bạn tạo lớp điều khiển cách thực IController, giao diện cấp thấp, bạn phải làm nhiều việc để có điều hữu ích thực Điều nói rằng, giao diện IController làm cho biểu tình hữu ích cách điều khiển hoạt động và, cuối cùng, tạo tập tin lớp gọi làBasicController.cs lý thư mục với nội dung hiển thị Liệt kê 17-2 Bảng liệt kê 17-2 Nội dung BasicController.cs Fil e sử dụng System.Web.M vc; sử dụng System Web.Routing; ControllersAndActions.Controllers namespace {public class BasicController: IController { khoảng trống công cộng Execute (RequestContext requestContext) { điều khiển string = (string) requestContext.RouteData.Values ["điều khiển"]; hành động string = (string) requestContext.RouteData.Values ["hành động"]; hành động)); } requestContext.HttpContext.Response.Write (string.Format ("Controller: {0}, Action: {1}", người điều khiển, } } Execute metho d IController giao diện thông qua với System.Web.Routing.RequestContext đối tượng cung cấp thông tin yêu cầu tuyến đường mà kết hợp (và dẫn đến điều khiển viện dẫn để xử lý yêu cầu đó) Các RequestContext lớp định nghĩa hai tài sản, mà mô tả Bảng 17-2 Bảng 17-2 Các thuộc tính xác định RequestContext Lớp Tên Mơ tả HttpContext Returns HttpContextBase vật mô tả yêu cầu RouteData Returns RouteData đối tượng mô tả tuyến đường mà phù hợp yêu cầu Các HttpContextBase objec t cung cấp quyền truy cập vào tập đối tượng mô tả yêu cầu tại, gọi bối cảnh đối tượng, tơi trở lại phần sau chương Các đối tượng RouteData mô tả tuyến đường Tôi mô tả RouteData quan trọng tài sản Bảng 17-3 Bảng 17-3 Các thuộc tính xác định RouteData Lớp Tên Mơ tả Tuyến đường trả vè RouteBase mà kết hợp tuyến đường RouteHandler trả vè IRouteHandler xử lý tuyến đường Giá trị trả tập hợp giá trị phân khúc, lập mục theo tên TÊN CLASS RẰNG VỚI CƠ SỞ END Các MVC Framework dựa tảng ASP.NET để xử lý yêu cầu, mà làm cho nhiều ý nghĩa chứng minh, tính phong phú tích hợp vào ứng dụng máy chủ IIS.Một vấn đề lớp học mà việc sử dụng tảng ASP.NET đến cung cấp thông tin khoảng yêu cầu khơng hợp đến đơn vị kiểm tra, Chìa khóa lợi ích sử dụng MVCFramework Microsoft cần thiết để giới thiệu khả kiểm thử trì khả tương thích với ứng dụng ASP.NET Web Forms giới thiệu lớp Base, gọi họ có tên với lớp tảng cốt lõi ASP.NET theo sau từ sở Vì vậy, ví dụ, tảng ASP.NET cung cấp thông tin bối cảnh yêu cầu số dịch vụ ứng dụng quan trọng thông qua đối tượng HttpContext Các sở lớp học đối tác HttpContextBase, ví dụ số thơng qua vào Execute phương pháp xác định giao diện IController (và bạn thấy lớp sở khác ví dụ tiếp theo) Các lớp học ban đầu sở xác định thuộc tính phương pháp tương tự, lớp học sở ln trừu tượng, có nghĩa họ dễ dàng sử dụng để kiểm tra đơn vị Đôi bạn nhận thể lớp học ASP.NET ban đầu, chẳng hạn HttpContext cần phải tạo lớp sở MVC-thân thiện, chẳng hạn HttpContextBase Bạn làm điều cách sử dụng lớp Wrapper, mà có tên lớp học ban đầu cộng với lời Wrapper, nhưHttpContextWrapper Các lớp wrapper có nguồn gốc từ lớp sở có nhà xây dựng mà chấp nhận thể lớp ban đầu, này: HttpContext myContext = getOriginalObjectFromSomewhere (); HttpContextBase MyBase = new HttpContextWrapper (myContext); Có gốc, Base Wrapper lớp suốt System.Web khơng gian tên để hỗ trợ ASP.NET MVC Framework ứng dụng cũ Web Forms liền mạch Tôi cho bạn cách sử dụng loại RouteBase IRouteHandler để tùy chỉnh hệ thống định tuyến Chương 16 Trong ví dụ này, tơi sử dụng tài sản giá trị để có giá trị điều khiển hành động biến phân đoạn ghi chúng vào phản ứng Lưu ý phần vấn đề tạo điều khiển tùy chỉnh bạn khơng có quyền truy cập vào tính xem Điều có nghĩa bạn phải làm việc mức độ thấp lý mà viết nội dung trực tiếp cho khách hàng Các tài sản HttpContextBase.Response trả đối tượng HttpResponseBase cho phép bạn cấu hình thêm vào phản ứng gửi đến khách hàng Đây touch-point tảng ASP.NET MVC Framework mà mô tả chiều sâu Pro ASP.NET MVC 5khung Cuốn sách tảng, mà xuất Apress Năm 2014 Nếu bạn chạy ứng dụng điều hướng đến / Basic / Index, bạn thấy sản lượng tạo điều khiển tùy chỉnh, thể hình 17-1 Hình 17-1 Một kết tạo từ BasicController lớp Thực giao diện IController cho phép bạn tạo lớp học mà MVC Framework công nhận điều khiển gửi u cầu tới, khơng có giới hạn cách thức yêu cầu xử lý trả lời Đây ví dụ tốt đẹp cho thấy bạn làm mở rộng MVC Framework là, khối xây dựng quan trọng điều khiển, khó khăn để viết ứng dụng phức tạp đường Tạo điều khiển Xuất phát từ điều khiển Lớp Như ví dụ trước đề nghị, MVC Framework vơ tận tùy biến mở rộng Bạn thực giao diện IController để tạo loại yêu cầu xử lý kết hệ mà bạn yêu cầu Không giống phương pháp hành động? Khơng quan tâm quan điểm tả? Sau đó, bạn lấy vấn đề tay bạn viết một, nhanh hơn, cách lịch xử lý yêu cầu Hoặc bạn xây dựng tính Microsoft Đội MVC Framework có cung cấp, đạt cách bắt nguồn điều khiển bạn từ lớp System.Web.Mvc.Controller System.Web.Mvc.Controller lớp học mà cung cấp yêu cầu xử lý hỗ trợ hầu hết nhà phát triển MVC quen thuộc với Đây lớp học sử dụng tất ví dụ chương trước Lớp điều khiển cung cấp ba trọng điểm tính năng: Phương pháp hành động: hành vi điều khiển phân chia thành nhiều phương pháp (thay có phương pháp Execute ()) Mỗi phương pháp hànhđộng tiếp xúc URL khác gọi với thơng số trích từ đến yêu cầu Kết hành động: Bạn trả đối tượng mô tả kết hành động (ví dụ, vẽ nhìn, chuyển hướng đến URL khác phương pháp hànhđộng), sau thực thay mặt bạn Việc tách biệt xác định kết thực chúng đơn giản hoá đơn thử nghiệm Bộ lọc: Bạn gói gọn hành vi tái sử dụng (ví dụ, xác thực, bạn thấy Chương 12) lọc, sau thẻ hành vi vào nhiều điều khiển phương pháp hành động cách đặt thuộc tính bạn mã nguồn Trừ bạn có yêu cầu cụ thể tâm trí, cách tốt để tạo điều khiển để lấy từ lớp điều khiển và, bạn mong ước, Là Visual Studiolàm tạo mẻ người điều khiển để đáp ứng với Thêm mục trình đơn Scaffold Bảng liệt kê 17-3 cho thấy điều khiển đơn giản tạo theo cách này, gọi làDerivedController, tạo cách sử dụng MVC Controller - tùy chọn Empty, với số changesto đơn giản thiết lập thuộc tính ViewBag chọn góc nhìn Bảng liệt kê 17-3 Các ontents DerivedController.cs Fil e using System; using System; sử dụng System.Linq; sử dụng System Web; sử dụng Sy stem.W eb.Mvc; ControllersAndActions.Controllers namespace {public class DerivedController: Bộ điều khiển { phương pháp"; công ActionResult Index () { ViewBag.Message = "Hello từ DerivedController Mục lục trở Xem ("MyView"); } } } Lớp điều khiển liên kết tới hệ thống xem Razor Trong danh sách, trả lại kết phương pháp Xem, qua tên xem muốn trả lại cho khách hàng tham số Để tạo điểm này, tạo Views / thư mục nguồn gốc, kích chuột phải vào lựa chọn Thêm MVC Xem trang (Razor) từ thực đơn Đặt tên choMyView.cshtml nhấp vào nút OK để tạo tập tin view Thiết lập nội dung tập tin để xem phù hợp Liệt kê 17-4 Bảng liệt kê 17-4 Nội dung MyView.cshtml Hồ sơ @{ } ViewBag.Title = "MyView"; MyView Lời nhắn: @ ViewBag.Message Nếu bạn khởi động ứng dụng điều hướng đến / Deri ved / Index, phương pháp hành động gọi nhìn tơi đặt tên trả lại, thể Con số 17-2 Hình 17-2 Một kết tạo từ DerivedController lớp Công việc dẫn xuất lớp điều khiển thực phương pháp hành động, đạt đầu vào cần thiết để xử lý yêu cầu, phát phù hợp phản ứng Các vô sốcách để làm phủ phần lại chương Tiếp nhận yêu cầu Đạt Bộ điều khiển thường xuyên cần truy cập liệu từ yêu cầu gửi đến, chẳng hạn giá trị chuỗi truy vấn, giá trị hình thức, thơng số phân tích từ URL hệ thống định tuyến Có ba cách để truy cập liệu: Giải nén từ tập hợp ngữ cảnh đối tượng Có liệu tham số để phương thức hành động Rõ ràng gọi mơ hình khn khổ ràng buộc tính Ở đây, tơi nhìn vào phương pháp tiếp cận để có đầu vào cho phương thức hành động bạn, tập trung vào đối tượng sử dụng bối cảnh thông số phương pháp hành động.Trong Chương 24, bao gồm ràng buộc mơ hình chiều sâu Bắt liệu từ Context Đối tượng Khi bạn tạo điều khiển cách bắt nguồn từ lớp sở troller Con, bạn có quyền truy cập vào tập hợp đặc tính thuận tiện để truy cập thơng tin u cầu Các tính chất bao gồm yêu cầu, đáp ứng, RouteData, HttpContext, Server Mỗi cung cấp thơng tin khía cạnh khác u cầu Tơi muốn nói đến nhữngđặc tính tiện lợi, họ lấy loại khác liệu từ ControllerContext dụ yêu cầu (có thể truy cập thơng qua tài sản Controlle r.ControllerContext) Tôi mô tả số đối tượng bối cảnh thơng dụng thuộc tính Bảng 17-4 Bảng 17-4 Thường sử dụng bối cảnh đối tượng Propertie s Bất động sản Kiểu Miêu tả Request.QueryString NameValueCollection NHẬN ĐƯỢC biến gởi với yêu cầu Request.Form NameValueCollection BÀI biến gởi với yêu cầu Request.Cookies HttpCookieCollection Cookies gửi trình duyệt với yêu cầu Request.HttpMethod chuỗi Các phương pháp HTTP (verb, NHẬN ĐƯỢC POST)được sử dụng cho yêu cầu Request.Headers NameValueCollection Các tập hợp đầy đủ tiêu đề HTTP gửi với điều yêu cầu Request.Url Uri Các URL yêu cầu Request.UserHostAddress chuỗi Các Địa IP việc lập người dùng yêu cầu RouteData.Route RouteBase Các chọn RouteTable.Routes lối vào yêu cầu RouteData.Values RouteValueDictionary Hoạt động tuyến đường thông số (một hai chiết xuất từ URL làmặc định giá trị) HttpContext.Application HttpApplicationStateBase Nhà nước ứng dụng cửa hàng HttpContext.Cache Bộ nhớ cache Bộ nhớ cache ứng dụng cửa hàng HttpContext.Items IDictionary Cửa hàng Nhà nước cho yêu cầu HttpContext.Session HttpSessionStateBase Tiểu bang cửa hàng khách buổi họp Người dùng IPrincipal Thông tin xác thực đăng nhập người dùng TempData TempDataDictionary Mục liệu tạm thời lưu trữ cho người dùng Các tính chất cá nhân mà đề cập đến đây- Yêu cầu, HttpContext, cung cấp cho đối tượng bối cảnh Tôi không vào chi tiết sách (vì họ phần tảng ASP.NET), họ cung cấp quyền truy cập vào số thơng tin tính hữu ích có giá trị khai thác Một phương pháp hành động sử dụng đối tượng bối cảnh để có thơng tin u cầu, Bảng liệt kê 17-5 thể hình thức hành động giả phương pháp Bảng liệt kê 17-5 Một phương pháp hành động Sử dụng Context Objects để Nhận Informatio n Về Yêu cầu công ActionResult RenameProduct () { // Truy cập thuộc tính khác từ ngữ cảnh đối tượng string userName = User.Identity.Name; chuỗ i serverName = Server.MachineName;c huỗi clientIP = Request.UserHostAddress; DateTime Datestamp =HttpContext.Timestamp; AuditRequest (userName, serverName, clientIP, dấu ngày tháng, "sản phẩm Đổi tên"); // Lấy liệu gửi từ Request.Form chuỗi oldProductName = Request.Form ["oldname"]; chuỗi newProductName = Request.Form ["NewName"]; Kết bool = AttemptProductRename (oldProductName, newProductName); } ViewData ["RenameResult"] = kết quả; trở Xem ("ProductRenamed"); Bạn khám phá phạm vi rộng lớn có sẵn thông tin yêu cầu bối cảnh sử dụng IntelliSense (trong phương thức hành động, nhập Và duyệt cửa sổ pop-up), mạng Microsoft Developer (nhìn lên System.Web.Mvc.Controller lớp sở nó, System.Web.Mvc.ControllerContext) Sử dụng phương pháp hành động Thông số Như bạn thấy chương, phương pháp hành động trước lấy thơng số Đây cách gọn gàng để nhận liệu đến giải nén tay từ đối tượng bối cảnh, làm cho phương pháp hành động bạn dễ dàng để đọc Ví dụ, giả sử tơi có phương pháp hành động sử dụng bối cảnh đối tượng này: công ActionResult ShowWeatherForecast () { chuỗi thành phố = (string) RouteData.Values ["thành phố"]; DateTime forDate = DateTime.Parse (Request.Form ["forDate"]); } // Thực dự báo thời tiết return View (); Tơi viết lại để sử dụng thông số, này: công ActionResult ShowWeatherForecast (thành phố chuỗi, DateTime forDate) { // Thực dự báo thời tiết return View (); } Đây không dễ dàng để đọc, giúp kiểm tra đơn vị Tơi thử nghiệm phương pháp hành động mà khơng cần phải thử đặc tính tiện lợi điều khiểnlớp Mẹo Điều đáng ý phương pháp hành động khơng phép có thơng số ref Nó khơng làm cho ý nghĩa họ làm MVC Framework đơn giản ném ngoại lệ thấy tham số Các MVC Framework cung cấp giá trị cho tham số phương pháp hành động cách kiểm tra đối tượng bối cảnh tính chất tự động, bao gồm Request.QueryString,Request.Form, RouteData.Values Tên thông số xử lý trường hợp-insensitively, đó, số phương pháp hành động gọi thành phố dân cư giá trị từ Request.Form ["City"], ví dụ Hiểu Các thông số đối tượng khởi tạo Lớp điều khiển sở lấy giá trị cho tham số phương pháp hành động cách sử dụng thành phần MVC Framework gọi nhà cung cấp giá trị mơ hình chất kết dính s.Cung cấp dịch vụ giá trị đại diện cho tập hợp mục liệu có sẵn để điều khiển bạn Có xây dựng nhà cung cấp giá trị mà lấy hàng từ Request.Form, Request.QueryString, Request.Files, RouteData.Values Các giá trị sau chuyển tới mơ hình chất kết dính mà cố gắng để đồ chúng đến loại mà hành động bạn phương pháp yêu cầu thông số Các chất kết dính mơ hình mặc định tạo đối tượng loại NET, bao gồm sưu tập loại tùy chỉnh dự án cụ thể Bạn thấy ví dụ điều trongchương 11 gửi mẫu từ quản trị viên trình bày phương pháp hành động đối tượng sản phẩm nhất, giá trị cá nhân bị phân tán yếu tố dạng HTML Tôi bao gồm nhà cung cấp giá trị chất kết dính mơ hình chiều sâu Chương 24 Hiểu Tùy chọn bắt buộc Parameter s Nếu MVC Framework khơng thể tìm thấy giá trị cho tham số kiểu tham chiếu (chẳng hạn chuỗi đối tượng), phương pháp hành động gọi là, sử dụng giá trị null cho tham số Nếu giá trị khơng thể tìm thấy cho tham số kiểu giá trị (như int đơi), sau ngoại lệ ném ra, phương pháp hành động không gọi Dưới cách khác để suy nghĩ nó: Thơng số giá trị kiểu bắt buộc Để làm cho họ tùy chọn, định giá trị mặc định (xem phần sau) thay đổi tham số kiểu cho loại nullable (như int? HoặcDateTime?), Vì MVC Framework vượt qua null khơng có giá trị dùng được, có sẵn Thơng số tham khảo loại tùy chọn Để làm cho họ bắt buộc (để đảm bảo giá trị null không thông qua), thêm số mã để phương pháp hành động để từ chối giá trị null Ví dụ, giá trị null, ném ArgumentNullException Spec ifying Mặc định Thông số Giá trị Nếu bạn muốn để xử lý yêu cầu mà không chứa lues va cho tham số phương thức hành động, bạn không muốn kiểm tra giá trị null mã bạn có trường hợp ngoại lệ ném ra, bạn sử dụng tham số tùy chọn tính C # để thay Bảng liệt kê 17-6 cung cấp trình diễn Bảng liệt kê 17-6 Sử dụng tính C # Tùy chọn thông số hành động Phương pháp ActionResult cơng tìm kiếm (query string = "tất cả", int page = 1) { // Quá trình yêu cầu return View (); } Bạn đánh dấu thông số tùy chọn cách gán giá trị bạn định nghĩa chúng Trong danh sách, cung cấp giá trị mặc định cho tham số truy vấn trang CácMVC Framework cố gắng để có giá trị từ yêu cầu thơng số này, khơng có giá trị có sẵn, giá trị mặc định tơi định sử dụng thay cho Đối với tham số chuỗi, truy vấn, điều có nghĩa không cần phải kiểm tra giá trị null Nếu yêu cầu chế biến không định truy vấn, sau phương pháp hành động gọi với chuỗi tất Đối với tham số int, Tôi không cần phải lo lắng u cầu dẫn đến sai sót khơng có giá trị trang: phương pháp đượcgọi với giá trị mặc định Tham số tùy chọn sử dụng với nhiều loại chữ, loại mà bạn xác định mà khơng sử dụng từ khóa mới, bao gồm string, int, đơi Thận trọng Nếu u cầu có chứa giá trị cho tham số khơng thể chuyển đổi sang loại xác (ví dụ, người sử dụng cung cấp cho chuỗi nonnumeric cho tham số int), sau khn khổ vượt qua giá trị mặc định cho loại tham số ( Ví dụ, cho tham số int), đăng ký giá trị cố gắng lỗi xác nhận bối cảnh đặc biệtđối tượng gọi ModelState Trừ bạn kiểm tra cho xác nhận lỗi ModelState, bạn có thành lẻ tình mà người dùng nhập liệu xấu thànhmột hình thức, yêu cầu xử lý người sử dụng không nhập liệu nhập giá trị mặc định Xem Chương 25 để biết chi tiết xác nhận vàModelState, mà sử dụng để tránh vấn đề Sản xuất Đầu Sau điều khiển xử lí xong yêu cầu, thường cần phải tạo phản ứng Khi tạo điều khiển trần kim loại cách thực giao diện IControllertrực tiếp, cần phải chịu trách nhiệm khía cạnh xử lý yêu cầu, kể tạo phản ứng với khách hàng Nếu muốn gửi HTML phản ứng, thí dụ, sau Tơi phải tạo lắp ráp liệu HTML gửi cho khách hàng sử dụng phương pháp Response.Write Tương tự vậy, muốn chuyển hướng trình duyệt người dùng tới URL khác, cần phải gọi phương thức Response.Redirect vượt qua URL Tôi quan tâm trực tiếp Cả hai cách thể Liệt kê 17-7, cho thấy phụ kiện cho Lớp BasicController Bảng liệt kê 17-7 Tạo kết BasicController.cs Fil e sử dụng System.Web.M vc; sử dụng System Web.Routing; ControllersAndActions.Controllers namespace {public class BasicController: IController { khoảng trống công cộng Execute (RequestContext requestContext) { điều khiển string = (string) requestContext.RouteData.Values ["điều khiển"]; hành động string = (string) requestContext.RouteData.Values ["hành động"]; if (action.ToLower () == "chuyển hướng") {requestContext.HttpContext.Response.Redirect ("/ Bắt nguồn / Ind } Else { requestContext.HttpContext.Response.Write (string.Format ("Controller: {0}, Action: {1}", điều khiển, hành động)); } } } } Bạn sử dụng phương pháp tương tự bạn bắt nguồn điều khiển bạn từ lớp điều khiển Lớp HttpResponseBase trả bạn đọc tài sảnrequestContext.HttpContext.Response phương thức Execute bạn có sẵn thơng qua thuộc tính Controller.Response, thể trongLiệt kê 17-8, cho thấy cải tiến cho DerivedController lớp Bảng liệt kê 17-8 Sử dụng tài sản để đáp ứng Tạo DerivedController.cs Fil e sử dụng System.Web.Mvc; ControllersAndActions.Controllers namespace {public class DerivedController: Bộ điều khiển { phương pháp"; công ActionResult Index () { ViewBag.Message = "Hello từ DerivedController Mục lục trở Xem ("MyView"); } public void ProduceOutput () { if (Server.MachineName == "TINY") {Response.Redirect ("/ Basic / Index"); } Else { ProduceOutput "); Response.Write ("Bộ điều khiển: Có nguồn gốc, hành động: } } } } } } công ViewResult Index () {return View ("Homepage"); } Khi sử dụng kết hoạt động hệ thống, bạn định điểm mà bạn muốn MVC Framework để render cách sử thể ViewResult lớp Các đơn giản nhấtcách để làm điều để kêu gọi điều khiển Xem phương pháp, qua tên xem tham số Trong bảng liệt kê, gọi Xem phương pháp với đối số trangchủ, quy định cụ thể mà tơi muốn HomePage.cshtml view để qua sử dụng Chú ý Chú ý kiểu trả cho phương pháp hành động danh sách ViewResult Phương pháp biên dịch làm việc tốt định tổng quát hơnActionResult loại Trong thực tế, số MVC lập trình viên xác định kết phương pháp hành động ActionResult, chí họ biết luôn trả cụ thể kiểu Khi MVC Framework gọi ExecuteResult phương pháp ViewResult đối tượng, tìm kiếm bắt đầu cho điểm mà bạn định Nếu bạn sử dụng khu vực dự án bạn, sau khn khổ tìm sau địa điểm: / Khu vực / /Lượt xem / / aspx / Khu vực / / Views / / ascx / Khu vực / / Views / Shared / aspx / Khu vực / / Views / Shared / ascx / Khu vực / / Views / / cshtml / Khu vực / / Views / / vbhtml / Khu vực / /Views/Shared/.cshtml / Khu vực / / Views / Shared / vbhtml Bạn nhìn thấy từ danh sách mà khung nhìn cho quan điểm tạo cho di sản cụ xem ASPX (các aspx ascx tập tin mở rộng), MVC Framework sử dụng Razor Điều để bảo tồn khả tương thích với đầu phiên khung MVC mà sử dụng tính kết xuất từ ASP.NET Web Forms Các khung trông cho C # Visual Basic NET Razor mẫu (The cshtml file C # người vbhtml file Visual Basic The Razor cú pháp tập tin, phân mảnh là, tên cho thấy, ngôn ngữ khác nhau.) Các MVC Framework kiểm tra để xem người tập tin tồn lượt Như sớm nằm trận đấu, sử dụng mà xem để làm cho kết hành động phương pháp Nếu bạn không sử dụng khu vực, bạn sử dụng khu vực không số tập tin trước danh sách tìm thấy, sau khn khổ tiếp tục tìm kiếm mình, cách sử dụng sau địa điểm: / Views / / aspx /Views//.ascx / Views / Shared / aspx / Views / Shared / ascx / Views / / cshtml / Views / / vbhtml / Views / Shared / cshtml / Views / Shared / vbhtml Một lần nữa, sau MVC Framework thử nghiệm vị trí tìm thấy tập tin, sau tìm kiếm dừng lại, xem tìm thấy sử dụng để làm cho phản ứng vớikhách hàng Tôi không sử dụng khu vực ứng dụng ví dụ, nơi mà khung xem xét /Views/Example/Index.aspx Chú ý điều khiển phần tên lớp bỏ qua, mà tạo ViewResult ExampleController dẫn đến tìm kiếm cho thư mục gọi ví dụ UNIT TEST: Rendering Một XEM Để kiểm tra xem phương pháp hành động ám, bạn kiểm tra việc ViewResult đối tượng mà trả Điều khơng hồn tồn giống điều (sau tất cả,bạn khơng sau q trình thơng qua để kiểm tra HTML thức mà tạo ra) đủ gần, dài bạn có niềm tin hợp lý hệ thống xem MVC Framework làm việc cách Tôi thêm đơn vị kiểm tra tập tin gọi ActionTests.cs để dự án thử nghiệm để tổ chức đơn vị xét nghiệm cho chương Việc tình hình tơi muốn thử nghiệm phương pháp hành động lựa chọn nhìn cụ thể, sau: cơng ViewResult Index () {return View ("Homepage"); } Bạn xác định xem chọn đọc ViewName tài sản ViewResult đối tượng, thể phương pháp thử nghiệm sử dụng System.Web.Mvc; sử dụng ControllersAndActions.Controllers; sử dụng Microsoft.VisualStudio.TestTools.UnitTesting; ControllersAndActions.Tests namespace {[TestClass] ActionTests public class { [Phương pháp kiểm tra] public void ControllerTest () { // Sắp xếp - tạo mục tiêu điều khiển ExampleController = ExampleController (); // Act - gọi kết phương pháp hành động ViewResult = target.Index (); } } // Khẳng định - kiểm tra kết Assert.AreEqual ("Trang chủ", result.ViewName); } Một biến thể nhẹ phát sinh bạn thử nghiệm phương pháp hành động mà chọn mặc định xem, này: công ViewResult Index () {return View (); } Trong tình huống, bạn cần phải chấp nhận chuỗi rỗng ("") cho điểm tên, này: Assert.AreEqual ("", result.ViewName); Các chuỗi rỗng cách ViewResult đối tượng tín hiệu để cơng cụ xem Razor diện mặc định liên kết với phương thức hành động chọn Trình tự thư mục mà MVC Framework tìm kiếm quan điểm ví dụ quy ước cấu hình Bạn không cần phải đăng ký bạn xem tập tin với khuôn khổ Bạn cần đặt chúng trong tập biết vị trí, khn khổ tìm thấy chúng Tơi lấy ước bước xa cách bỏ qua tên view Tôi muốn trả lại gọi Xem phương pháp, thể Liệt kê 17-14 Bảng liệt 17-14 Tạo ViewResult Không Chỉ định Xem ExampleController.cs Hồ sơ sử dụng System Web.Mvc ; using System; ControllersAndActions.Controllers namespace {public class ExampleController: Bộ điều khiển { công ViewResult Index () { return View (); } } } Các MVC Framework giả định muốn để vẽ lại điểm mà có tên giống phương pháp hành động Điều có nghĩa gọi đến Xem phương pháp Listing17-14 bắt đầu tìm kiếm cho điểm gọi Index Lưu ý Các MVC Framework thực lấy tên phương pháp hành động từ RouteData.Values ["hành động"] giá trị, mà tơi giải thích phần định tuyến hệ thống Chương 15 16 Tên phương thức hành động định tuyến giá trị bạn sử dụng xây dựng lớp học định tuyến, nhưngđiều khơng phải trường hợp bạn thực tùy chỉnh lớp học định tuyến mà không làm theo MVC Framework ước Có số phiên ghi đè Xem phương pháp Họ tương ứng để thiết lập thuộc tính khác ViewResult đối tượng tạo Ví dụ, bạn ghi đè lên bố tríđược sử dụng điểm rõ ràng đặt tên thay thế, này: công ViewResult Index () { return View ("Index", "_AlternateLayoutPage"); } Chỉ định A XEM THEO NÓ PATH Việc đặt tên phương pháp quy ước thuận tiện đơn giản, làm hạn chế quan điểm, bạn làm Nếu bạn muốn để làm cho cụ thể xem, bạn làm cách cung cấp minh bạch đường vượt qua tìm kiếm giai đoạn Chỗ Là thí dụ: sử dụng System.Web.Mvc; ControllersAndActions.Controllers namespace {public class ExampleController: Bộ điều khiển { công ViewResult Index () { trở Xem ("~ /Views/Other/Index.cshtml"); } } } Khi bạn định quan điểm này, đường dẫn phải bắt đầu với / ~ / bao gồm tập tin mở rộng tên (ví dụ cshtml cho Razor views có chứa mã C #) Nếu bạn tìm thấy cách sử dụng tính năng, tơi đề nghị bạn nên dành chút thời gian tự hỏi bạn cố gắng để đạt Nếu bạn cố gắng để làm cho quan điểm thuộc vào điều khiển khác, sau bạn tốt off chuyển hướng người dùng đến phương pháp hành động điều khiển (xem các"Chuyển hướng đến hành động pháp" phần sau chương cho ví dụ) Nếu bạn cố gắng để làm việc xung quanh chương trình đặt tên khơng phù hợp với cách bạn đãtổ chức dự án bạn, sau xem Chương 20, điều giải thích làm để thực tìm kiếm tùy chỉnh trình tự Đi qua liệu từ phương pháp hành động để Góc nhìn Các MVC Framework cung cấp số lượng khác cách để truyền liệu fro m phương pháp hành động để xem, mà mô tả sau phần Tôi chạm vào chủ đề quan điểm, mà bao gồm chiều sâu Chương 20 Trong chương, thảo luận đủ chức xem để chứng minh tính điều khiển làm quan tâm, thích thú Cung cấp Xem mẫu Vật Bạn gửi đối tượng vào xem cách qua tham số để xem phương pháp hiển thị Liệt kê 17-15 Bảng liệt 17-15 Chỉ định Xem mẫu Object ExampleController.cs Fil e using System; sử dụng System.Web.Mvc; ControllersAndActions.Controllers namespace {public class ExampleController: Bộ điều khiển { công ViewResult Index () {DateTime ngày = DateTime.N ow; trả lại Xem (ngày); }}} Tôi thông qua DateTime đối tượng xem mơ hình tơi truy cập đối tượng điểm sử dụng Razor mẫu từ khóa Để chứng minh Mơ hình từ khóa, tơi thêm điểm gọi Index.cshtml Views / Ví dụ thư mục, với nội dung hiển thị Listing 17-16 Bảng liệt 17-16 Truy cập vào Xem Model Index.cshtml Fil e @{ ViewBag.Title = "Index"; } Index Ngày là: @ (((DateTime) Model) DayOfWeek) Đây không định kiểu yếu đánh máy xem Các quan điểm điều quan điểm đối tượng mơ hình, đối xử với thể đối tượng Để có giá trị DAYOFWEEK tài sản, cần phải bỏ đối tượng đến thể đối tượng DateTime Điều làm việc, tạo lộn xộn lượt xem Tơi xếp gọn gàng lên cách tạo kiểu mạnh view s, điểm bao gồm chi tiết loại hình xem đối tượng mơ hình, chứng minh Liệt kê 17-17 Bảng liệt 17-17 Thêm Typing mạnh mẽ Index.cshtml Hồ sơ model DateTime @{ ViewBag.Title = "Index"; } Index Ngày là: @ Model.DayOfWeek Tôi định xem loại mô hình cách sử dụng Razor model từ khóa Chú ý sử dụng chữ thường m xác định kiểu mẫu chữ hoa M đọc giá trị Không chỉkhông giúp ngăn nắp lên xem, trực quan Studio hỗ trợ IntelliSense cho quan điểm đánh máy mạnh mẽ, thể Con số 17-3 Hình 17-3 IntelliSense hỗ trợ cho kiểu mạnh lượt xem UNIT TEST: XEM MODEL ĐỐI TƯỢNG Bạn truy cập vào điểm đối tượng mơ hình thơng qua từ phương pháp hành động để xem qua ViewResult.ViewData.Model tài sản Đây kiểm tra cho phương pháp hành động Listing 17-17 Bạn thấy tơi sử dụng Assert.IsInstanceOfType metho d để kiểm tra quan điểm mô hình đối tượng thể đối tượng DateTime: [Phương pháp kiểm tra] public void ViewSelectionTest () { // Sắp xếp - tạo mục tiêu điều khiển ExampleController = ExampleController (); // Act - gọi kết phương pháp hành động ViewResult = target.Index (); // Khẳng định - kiểm tra kết } Assert.AreEqual ("", result.ViewName); Assert.IsInstanceOfType (result.ViewData.Model, typeof (System.DateTime)); Tôi phải thay đổi tên view tơi kiểm tra cho để phản ánh thay đổi phương thức hành động kể từ đơn vị cuối kiểm tra thấy bạn, sau: [Phương pháp kiểm tra] public void ControllerTest () { // Sắp xếp - tạo mục tiêu điều khiển ExampleController = ExampleController (); // Act - gọi kết phương pháp hành động ViewResult = target.Index (); // Khẳng định - kiểm tra kết Assert.AreEqual ("", result.ViewName); } Đi qua liệu với Xem g Ba Tôi giới thiệu Xem Bag featur e Chương Tính cho phép bạn xác định thuộc tính động đối tượng truy cập chúng nhìn Các động vật truy cậpthơng qua Controller.ViewBag tài sản, chứng minh Liệt kê 17-18 Bảng liệt 17-18 Sử dụng Xem Bag tính ExampleController.cs Fil e using System; sử dụng System.Web.Mvc; ControllersAndActions.Controllers namespace {public } class ExampleController: Bộ điều khiển { công ViewResult Index () {ViewBag.Messa ge = "Hello"; View Bag.Date =DateTi me.Now; return View (); } } Tôi xác định Xem Bag thuộc tính gọi tin nhắn ngày đơn giản cách gán giá trị cho họ Trước thời điểm này, không thuộc tính tồn tại, tơi khơng chuẩn bị để tạo chúng Để đọc liệu trở lại vào xem, tơi đơn giản có tính chất tương tự mà đặt phương thức hành động, Bảng liệt kê 17-19 cho thấy Bảng liệt 17-19 Đọc liệu từ ViewBag Index.cshtml Fil e @{ ViewBag.Title = "Index"; } Index Ngày là: @ ViewBag.Date.DayOfWeek Thông điệp là: @ ViewBag.Message Các ViewBag có lợi cách sử dụng quan điểm đối tượng mơ hình dễ dàng để gửi nhiều đối tượng để xem Nếu bị hạn chế để sử dụng xem mơ hình, sau tơi cần phải tạo loại mà có chuỗi DateTime thành viên trật tự để có hiệu Khi làm việc với động đối tượng, bạn nhập trình tự phương pháp bất động sản gọi góc nhìn, giống này: Ngày là: @ ViewBag.Date.DayOfWeek.Blah.Blah.Blah Visual Studio cung cấp IntelliSense hỗ trợ cho động vật, bao gồm ViewBag, lỗi điều không tiết lộ quan điểm đưa UNIT TEST: VIEWBAG Bạn đọc giá trị từ ViewBag qua ViewResult.ViewBag tài sản Các theo phương pháp thử nghiệm cho phương pháp hành động Listing 17-18: [Phương pháp kiểm tra] public void ControllerTest () { // Sắp xếp - tạo mục tiêu điều khiển ExampleController = ExampleController (); // Act - gọi kết phương pháp hành động ViewResult = target.Index (); // Khẳng định - kiểm tra kết Assert.AreEqual ("Hello", result.ViewBag.Message); } Biểu diễn Redirection s Một thông thường kết từ phương pháp hành động không sản xuất sản lượng trực tiếp, để chuyển hướng trình duyệt người dùng đến URL Hầu hết cácthời gian, URL khác hoạt động phương pháp đơn xin tạo đầu bạn muốn người sử dụng đến nhìn thấy THE POST / REDIRECT / GET PATTERN Các thường xuyên sử dụng chuyển hướng phương thức hành động mà trình HTTP POST yêu cầu Như đề cập chương trước, POST yêu cầu sử dụng bạn muốn thay đổi trạng thái ứng dụng Nếu bạn cần trả HTML sau việc xử lý yêu cầu, bạn chạy nguy mà người dùng nhấp vào reload trình duyệt nút gửi lại hình thức lần thứ hai, gây bất ngờ không mong muốn kết Để tránh điều vấn đề, bạn làm theo mơ hình gọi Post / Redirect / Nhận Trong mơ hình, bạn nhận POST u cầu, q trình đó, sau chuyển hướng cáctrình duyệt mà GET yêu cầu thực trình duyệt cho URL GET yêu cầu không nên thay đổi trạng thái bạn ứng dụng, đó, resubmissions vô ý yêu cầu không gây vấn đề Khi bạn thực chuyển hướng, bạn gửi hai mã HTTP đến Trình duyệt: Gửi HTTP mã 302, tạm thời chuyển hướng Đây loại thường sử dụng chuyển hướng sử dụng viết / Redirect / Lấy mẫu, mã số mà bạnmuốn để gửi Gửi HTTP mã 301, mà chuyển hướng vĩnh viễn Điều nên sử dụng thận trọng, thị nhận HTTP mã không yêu cầu URL ban đầu bao giờmột lần để sử dụng URL mà bao gồm bên cạnh mã chuyển hướng Nếu bạn nghi ngờ, sử dụng chuyển hướng tạm thời; là, gửi mã số 302 Chuyển hướng đến Literal URL Các cách để chuyển hướng trình duyệt để gọi Redirect phương pháp, mà trả thể RedirectResult lớp, thể Bảng liệt 17-20 Bảng liệt 17-20 Đang chuyển hướng tới UR L Literal ExampleController.cs Fil e using System; sử dụng System.Web.Mvc; ControllersAndActions.Controllers namespace {public } class ExampleController: Bộ điều khiển { công ViewResult Index () {ViewBag.Message = "Hell o"; ViewBag.Date =DateTim e.Now; return View (); } công RedirectResult Redirect () {return Redirect ("/ Ví dụ / Index"); } } Các URL bạn muốn chuyển hướng để thể chuỗi thông qua tham số để Redirect phương pháp Các Redirect phương pháp gửi chuyển hướng tạm thời Bạn gửi chuyển hướng vĩnh viễn cách sử dụng RedirectPermanent phương pháp, thể Bảng liệt 17-21 Bảng liệt 17-21 Vĩnh viễn Chuyển hướng đến URL Literal ExampleController.cs Hồ sơ công RedirectResult Redirect () { trở RedirectPermanent ("/ Ví dụ / Index"); } Mẹo Nếu bạn thích, bạn sử dụng tải phiên Redirect phương pháp, có bool tham số mà xác định có hay không chuyển hướng vĩnh viễn UNIT TEST: LITERAL redirections Literal chuyển hướng dễ dàng để kiểm tra Bạn đọc URL kiểm tra xem chuyển hướng vĩnh viễn tạm thời sử dụng Url vĩnh viễn thuộc tính củaRedirectResult lớp Các sau phương pháp thử nghiệm cho việc chuyển hướng hiển thị Listing 17-21: [Phương pháp kiểm tra] public void ControllerTest () { // Sắp xếp - tạo mục tiêu điều khiển ExampleController = ExampleController (); // Act - gọi hành động phương pháp RedirectResult kết = target.Redirect (); // Khẳng định - kiểm tra kết Assert.IsTrue } (result.Permanent); Assert.AreEqual ("/ Ví dụ / Index",result.Url); Chú ý tơi cập nhật kiểm tra để nhận RedirectResult gọi hành động phương pháp Chuyển hướng đến URL Hệ thống định tuyến Nếu bạn chuyển hướng người dùng đến phần khác bạn ứng dụng, bạn cần phải chắn URL bạn gửi có giá trị phạm vi bạn URL schema Vấn đề với việc sử dụng URL đen để chuyển hướng có thay đổi định tuyến bạn schema có nghĩa bạn cần phải qua bạn Mã cập nhật URL May mắn thay, bạn sử dụng định tuyến hệ thống để tạo URL hợp lệ với RedirectToRoute phương pháp, mà tạo thể RedirectToRouteResult, thể Liệt kê 17-22 Bảng liệt 17-22 Đang chuyển hướng tới Routing Hệ URL ExampleController.cs Hồ sơ using System; sử dụng System.Web.Mvc; ControllersAndActions.Controllers namespace {public } class ExampleController: Bộ điều khiển { công ViewResult Index () { ViewBag.Message = "Hello" ; ViewBag.Date = DateTime Now; return View (); } công RedirectToRouteResult Redirect () {return RedirectToRoute (mới { điều khiển = "Ví dụ", hành động = "Index", ID = "myid" }); } } Các RedirectToRoute phương pháp đưa chuyển hướng tạm thời Sử dụng RedirectToRoutePermanent phương pháp để chuyển hướng vĩnh viễn Cả haiphương pháp lấy loại vơ danh có tính chất sau thông qua với định tuyến hệ thống để tạo URL Để biết thêm thông tin chi tiết trình này, xem chương 15 và16 Mẹo ý RedirectToRoute phương thức trả RedirectToRouteResult đối tượng cập nhật phương pháp hành động để trở lại kiểu ĐƠN VỊ KIỂM TRA: chuyển hướng chuyển Dưới đơn vị kiểm tra cho phương pháp hành động Listing 17-22: [Phương pháp kiểm tra] public void ControllerTest () { // Sắp xếp - tạo mục tiêu điều khiển ExampleController = ExampleController (); // Act - gọi hành động phương pháp RedirectToRouteResult kết = target.Redirect (); } // Khẳng định - kiểm tra kết Assert.IsFalse (result.Permanent); Assert.AreEqual("Example", result.RouteValues[ "controller"]); Assert.AreEqual("Index", result.R outeValues["action"]);Assert.AreEqual("MyID", r esult.RouteValues["ID"]); Bạn thấy tơi thử nghiệm kết gián tiếp cách tìm kiếm thông tin định tuyến cung cấp RedirectToRouteResult đối tượng, có nghĩa tơi khơng cần phải phân tích URL Chuyển hướng đến hành động Metho d Bạn chuyển hướng đến phương pháp hành động nhiều lịch cách sử dụng RedirectToAction phương pháp (đối với chuyển hướng tạm thời) hoặcRedirectToActionPermanent (cho chuyển hướng vĩnh viễn) Đây hàm bao quanh RedirectToRoute phương pháp cho phép bạn định giá trị cho phương pháp hành động điều khiển mà không cần để tạo loại vô danh, thể Liệt kê 1723 Bảng liệt 17-23 Đang chuyển hướng sử dụng phương pháp RedirectToAction ExampleController.cs Hồ sơ công RedirectToRouteResult Redirect () { trở RedirectToAction ("Index"); } Nếu bạn cần định phương pháp hành động, sau giả định bạn đề cập đến phương pháp hành động dòng điều khiển Nếu bạn muốn để chuyển hướng đến điều khiển khác, bạn cần phải cung cấp tên tham số, này: công RedirectToRouteResult Redirect () {return RedirectToAction ("Index", "cơbản"); } Có khác tải phiên mà bạn sử dụng để cung cấp giá trị bổ sung cho URL hệ Chúng thể cách sử dụng loại vô danh, mà xu hướng làm suy yếu mục đích phương pháp thuận tiện, làm cho bạn mã dễ dàng để đọc Lưu ý Các giá trị mà bạn cung cấp cho phương pháp hành động điều khiển không xác nhận trước chúng chuyển tới tuyến hệ thống Bạn chịu trách nhiệm đảm bảorằng mục tiêu mà bạn định thực hữu BẢO DỮ LIỆU QUA A chuyển hướng A chuyển hướng làm cho trình duyệt để nộp hồn tồn u cầu HTTP mới, có nghĩa bạn khơng có quyền truy cập tới thông tin chi tiết ban yêu cầu Nếu bạn muốnđến thông qua liệu từ yêu cầu đến bên cạnh, bạn sử dụng Temp Dữ liệu tính TempData tương tự với phiên liệu, ngoại trừ TempData giá trị đánh dấu để xóa chúng đọc, chúng đưa yêu cầu xử lý Đây mộtlý tưởng xếp liệu ngắn ngủi mà bạn muốn tồn chuyển hướng Dưới ví dụ đơn giản phương pháp hành động sử dụng cácRedirectToAction phương pháp: RedirectToRouteResult RedirectToRoute () { TempData ["Message"] = "Hello"; TempData ["Date"] = DateTime.Now; } trở RedirectToAction ("Index"); Khi phương pháp xử lý yêu cầu, đặt giá trị TempData sưu tập, sau chuyển hướng trình duyệt người dùng đến số phương pháp hành độngtrong điều khiển Bạn đọc TempData giá trị trở lại phương pháp hành động mục tiêu, sau truyền cho xem, này: công ViewResult Index () {ViewBag.Mess age = TempData ["Message"]; View Bag.Date = TempData ["Date"]; return } View (); Một cách tiếp cận trực tiếp đọc giá trị quan điểm, này: @{ ViewBag.Title = "Index"; } Index Ngày là: @ (((DateTime) TempData ["Date"]) DayOfWeek) Thông điệp là:TempData ["Message"] Đọc giá trị view có nghĩa bạn khơng cần phải sử dụng Xem Bag tính phương pháp hành động Tuy nhiên, bạn phải ép TempData kết vào loại thích hợp Bạn có giá trị từ TempData mà khơng đánh dấu để loại bỏ cách sử dụng Peek phương pháp, này: DateTime thời gian = (DateTime) TempData.Peek ("ngày"); Bạn trì giá trị mà khơng bị xóa cách sử dụng Keep phương pháp, này: TempData.Keep ("ngày"); Các Keep phương pháp không bảo vệ giá trị mãi Nếu giá trị đọc lần nữa, đánh dấu để loại bỏ lần Nếu bạn muốn để lưu trữ mục vậymà họ không gỡ bỏ yêu cầu xử lý sau sử dụng phiên liệu thay cho Trở lỗi HTTP Codes Các cuối xây dựng ActionResult lớp màTơi nhìn vào sử dụng để gửi thông báo lỗi cụ thể mã số kết HTTP đến khách hàng Hầu hết ứng dụng khơng u cầu tính MVC Framework tự động tạo loại kết Tuy nhiên, họ hữu ích bạn cần đến cầm lấy trực tiếp kiểm soát hơncác phản hồi gởi đến khách hàng Gửi cụ HTTP Mã Bạn gửi trạng thái HTTP cụ thể mã số cho lơng mày er sử dụng HttpStatusC odeResult lớp Có khơng có điều khiển helper phương pháp này, bạn phải nhanh chóng lớp trực tiếp, thể Liệt kê 17-24 Bảng liệt 17-24 Gửi trạng thái cụ thể luật ExampleController.cs Hồ sơ using System; sử dụng System.Web.Mvc; ControllersAndActions.Controllers namespace {public class ExampleController: Bộ điều khiển { công ViewResult Index () {ViewBag.Messag e = "Hello"; ViewBa g.Date =DateTime.N ow; return View (); } công RedirectToRouteResult Redirect () {return RedirectToAction ("Index"); } công HttpStatusCodeResult StatusCode () { trở HttpStatusCodeResult (404, "URL dịch vụ "); } } } Các nhà xây dựng thông số cho HttpStatusCodeResult trạng thái số mã tùy chọn mô tả tin nhắn Trong bảng liệt kê, tơi trở mã 404, có nghĩa u cầu tài ngun khơng khơng tồn Gửi 404 Resul t Tơi đạt hiệu ứng Listing 17-24 sử dụng thuận tiện HttpNotFoundResult lớp, có nguồn gốc từ HttpStatusCodeResult có thểđược tạo cách sử dụng điều khiển HttpNotFound phương tiện, thể Liệt kê 1725 Bảng liệt 17-25 Tạo 404 Kết ExampleController.cs Hồ sơ công HttpStatusCodeResult StatusCode () { trở HttpNotFound (); } Gửi 401 Resul t Một lớp wrapper cho trạng thái HTTP cụ thể HttpUnauthorizedResult, mà trả mã 401, sử dụng để yêu cầu không phép Bảng liệt 17-26 cung cấp trình diễn Bảng liệt 17-26 Tạo 401 Kết ExampleController.cs Hồ sơ công HttpStatusCodeResult StatusCode () { return new HttpUnauthorizedResult (); } Có khơng có người trợ giúp phương pháp việc điều khiển lớp học để tạo trường hợp HttpUnauthorizedResult, bạn phải làm trực tiếp.Các hiệu ứng trở thể lớp thường để chuyển hướng người dùng đến trang xác thực, bạn thấy Chương 12 UNIT TEST: HTTP MÃ TÌNH TRẠNG Các HttpStatusCodeResult lớp theo mơ hình bạn thấy loại khác, làm cho nhà nước có sẵn thơng qua tập hợp thuộc tính Trong trường hợp này,các StatusCode tài sản trả mã trạng thái HTTP số, StatusDescription tài sản trả chuỗi mô tả liên quan Các theo phương pháp thử nghiệm cho phương pháp hành động Listing 17-26: [Phương pháp kiểm tra] public void ControllerTest () { // Sắp xếp - tạo mục tiêu điều khiển ExampleController = ExampleController (); } // Act - gọi phương thức hành động HttpStatusCodeResult kết = target.StatusCode (); // Khẳng định - kiểm tra kết Assert.AreEqual (401, result.StatusCode); Tổng kết Bộ điều khiển trọng điểm xây dựng khối MVC design pattern Trong chương, bạn thấy làm để tạo điều khiển "thô" việc thực cácIController giao diện điều khiển thuận tiện cách phát sinh từ điều khiển lớp Bạn thấy vai trò mà hành động phương pháp chơi khung MVC điều khiển làm họ giảm bớt đơn vị thử nghiệm Tôi thấy bạn khác cách mà bạn nhận đầu vào tạo đầu từ phương pháp hành động chứng minh khác loại ActionResult mà làm cho đơn giản trình linh hoạt Trong chương tiếp theo, sâu vào sở hạ tầng điều khiển để hiển thị cho bạn lọc đặc trưng, thay đổi yêu cầu xử lý ... loại khác liệu từ ControllerContext dụ yêu cầu (có thể truy cập thông qua tài sản Controlle r.ControllerContext) Tôi mô tả số đối tượng bối cảnh thông dụng thuộc tính Bảng 17- 4 Bảng 17- 4 Thường... mạnh view s, điểm bao gồm chi tiết loại hình xem đối tượng mơ hình, chứng minh Liệt kê 17- 17 Bảng liệt 17- 17 Thêm Typing mạnh mẽ Index.cshtml Hồ sơ model DateTime @{ ViewBag.Title = "Index"; }... không chuẩn bị để tạo chúng Để đọc liệu trở lại vào xem, đơn giản có tính chất tương tự mà đặt phương thức hành động, Bảng liệt kê 17- 19 cho thấy Bảng liệt 17- 19 Đọc liệu từ ViewBag Index.cshtml Fil