Chương 2 Cơ Sở Lý Thuyết
2.7. Tìm hiểu về View
Trong ứng dụng ASP.NET MVC một yêu cầu từ trình duyệt sẽ đƣợc ánh xạ đến một Controller Action. Một Controller Action sẽ trả về một View. Một Controller Action có thể thực hiện một số hành động khác bằng cách chuyển hướng đến một Controller Action khác.
Ví dụ: HomeController chứa 2 Controller Action là: Index() và Details() using System.Web.Mvc;
namespace MvcApplication1.Controllers {
public class HomeController: Controller {
return View();
}
public ActionResult Details() {
return RedirectToAction(“Index”);
} }
Để gọi hành động Index() bằng cách gõ địa chỉ trình duyệt: /Home/Index Để gọi hành động Details() bằng cách gõ địa chỉ trình duyệt: / Home/Details
Hành động Index() trả về View. Hầu hết hành động sẽ trả về View. Tuy nhiên, một hành động có thể trả về những loại khác của kết quả hành động. Ví dụ, hành động Details() trả về RedirectToActionResult nó sẽ chuyển đến hành động Index()
Page 33 Hành động Index() này chỉ chứa 1 dòng code duy nhất: View(). Dòng code này trả về 1 View với đường dẫn trên web server là: \Views\Home\Index. Đường dẫn đến View đƣợc suy ra từ tên Controller và tên Controller Action
Thêm nội dung cho View
Một View là 1 chuẩn HTML mà có thể chứa scripts. Bạn sử dụng scripts để thêm nội dung cho view.
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Index</title>
</head>
<body>
<div>
The current date and time is
<% Response.Write(DateTime.Now);%>
</div>
</body>
</html>
Nội dung trang HTML chứa đoạn script dưới đây:
<% Response.Write(DateTime.Now);%>
Bạn sử dụng script <% và %> để bắt đầu và kết thúc script. Mã script này đƣợc viết bằng C#. Nó hiển thị ngày và giờ được gọi bằng phương thức Response.Write() để chuyển nội dung đến Browser. Microsoft cung cấp 1 cách gọi ngắn hơn để thay thế Response.Write() là: <%= và %>
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
Page 34
<head id="Head1" runat="server">
<title>Index</title>
</head>
<body>
<div>
The current date and time is <%=DateTime.Now %>
</div>
</body>
</html>
Sử dụng HTML Helpers để tạo View Content
Để dễ dàng tạo một View, bạn có thể gọi HTML Helper. Bạn có thể sử dụng HTML để thêm các thành phần chuẩn nhƣ textboxes, links, và listboxes. Để tạo 1 khung Login thì View cần 3 HTML Helpers: BeginForm(), TextBox(), Password()
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Login Form</title>
</head>
<body>
<div>
<% using (Html.BeginForm()) { %>
<label for="UserName">User Name:</label>
<br />
<%= Html.TextBox("UserName") %>
<br /><br />
<label for="Password">Password:</label>
Page 35 <br />
<%= Html.Password("Password") %>
<br /><br />
<input type="submit" value="Log in" />
<% } %>
</div>
</body>
</html>
Hình 2.5 Form Login
Tất cả những phương thức HTML Helpers được gọi bởi 1 thuộc tính của View.
Ví dụ bạn muốn biễu diễn 1 textbox thì gọi Html.TextBox(). Nên nhớ rằng khi gọi Html.TextBox() và Html.Password() thì sử dụng đoạn script <%= và %>.
Sử dụng phương thức HTML Helper là lựa chọn tốt nhất. Nó sẽ làm giảm số lƣợng HTML và Script khi viết.
Page 36 Sử dụng View Data để truyền dữ liệu đến View
Sử dụng View Data để truyền dữ liệu từ Controller đến View. Hãy nghĩ rằng View Data là 1 gói dữ liệu đƣợc truyền đi bằng mail
using System.Web.Mvc;
namespace MvcApplication1.Controllers {
public class ProductController : Controller {
public ActionResult Index() {
ViewData["message"] = "Hello World!";
return View();
}
} }
Một thuộc tính ViewData sẽ phụ thuộc vào tên và giá trị. Tên là: message và giá trị là: Hello World. Khi View gọi phương thức Index(), View Data sẽ được hiển thị ra View
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Product Index</title>
</head>
<body>
<div>
<%= Html.Encode(ViewData["message"]) %>
</div>
</body>
Page 37
</html>
Html.Encode giúp mã hóa các kí tự đặc biệt nhƣ < và> , vì vậy Website chỉ hiển thị những nội dung an toàn.