Giới thiệu
Bài viết này giúp hiểu cơ bản về điều hướng trang web đóng vai trò rất quan trọng trong sử dụng kỹ thuật chuyển hướng tốt. Chuyển hướng trong ứng dụng web rất quan trọng, để hiểu từ thực tế trong dự án ứng dụng web, chúng ta cần phải di chuyển từ trang này sang trang khác và quay trở lại trang của trang gốc. Navigation có thể gây mất dữ liệu nếu không xử lý đúng cách. Chúng ta có nhiều kỹ thuật để chuyển dữ liệu từ trang này sang trang khác, nhưnhisuwr dụng kỹ thuật nào là điều quan trọng.
- Response.Redirect
- Server.Transfer
- Server.Exceute
- Cross page posting
1. Response.Redirect
Đây là một trong các kỹ thuật chuyển hướng trong ASP.NET để di chuyển từ web khác MSDN nói: Nó chuyển hướng client đến URL mới. Chỉ định URL mới và thực thi trang hiện tại nên chấm dứt.
Xử lý
Khi xử lý request của client khi máy chủ web gặp phải mã response.redirect với URL vị trí được chuyển hướng nó sẽ gửi lại tiêu đề reponse cho client sau đó client khởi tạo nhận được request của trang mới. Trong ví dụ này, chúng ta có thể thấy đường đi đến máy chủ web được thực hiện khi response.redirect được sử dụng.
Chúng ta có thể điều hướng đến URL khác sử dụng response.redirect hoặc trên cùng máy chủ hoặc máy chủ khác nhau. Giống như trong ví dụ sau đây chúng ta có thể đi đến trang chủ Google được lưu trữ trên máy chủ khác sử dụng response.redirect
Response.Redirect("https://www.google.co.in/?gfe_rd=cr&ei=BpszVKXmIsPN8gfBi4GABg&gws_rd=ssl");
Nó duy trì lịch sử của URL từ nơi nó chuyển đến, có nghĩa là chúng ta có thể quay trở lại bằng cách sử dụng nút quay lại.
Chú ý quan trọng
- Chuyển hướng đến URL chuyển hướng mới, nơi nó được chuyển trong trình duyệt.
- Duy trì lịch sử và trang trước có sẵn với các nút quay lại.
- Chuyển hướng người dùng đến trang web được lưu trữ trên cùng máy chủ hoặc máy chủ khác nhau.
- Đi vòng thêm đến máy chủ khiến nó chậm hơn chút.
2. Server.Transfer
Nó là kỹ thuật điều hướng trong ứng dụng web ASP.NET để di chuyển từ web khác trên cùng máy chủ mà không thay đổi URL trong thanh địa chỉ. Đây là cú pháp cho việc sử dụng kỹ thuật này, về cơ bản nó là URL của nơi bạn muốn hướng đến.
Server.Transfer("Webform2.aspx");
Trên page load Webform2.aspx. Không gian tên System.Collections.Specialized chứa NameValueCollection.
System.Collections.Specialized.NameValueCollection formVals = Request.Form;
Ví dụ:
namespace NevigationTest
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Collections.Specialized.NameValueCollection formVals = Request.Form;
Label1.Text = formVals["ctl00$MainContent$txtName"];
Label2.Text = formVals["ctl00$MainContent$TextBox2"];
Label3.Text = formVals["ctl00$MainContent$TextBox3"];
}
}
}
Gửi thông tin từ trang web ASP.NET bao gồm cả value của hidden fields, chẳng hạn như __VIEWSTATE, __EVENTTARGET và __EVENTARGUMENT, được sử dụng để xử lý nội bộ trong trang.
Bạn có thể loại bỏ chúng bằng cách code hay hardcode điều khiển mà bạn muốn sử dụng để có được các giá trị từ trang nguồn.
Sử dụng Previous Page
Sử dụng thuộc tính PreviousPage bạn có thể tìm thấy điều khiển sau:
Page Pg = Page.PreviousPage;
Ví dụ:
namespace NevigationTest
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page Pg = Page.PreviousPage;
if(Pg != null)
{
Control placeHolder = Pg.Controls[0].FindControl("MainContent");
TextBox prevTxtBox = (TextBox)placeHolder.FindControl("txtName");
if (prevTxtBox != null)
{
Label1.Text = prevTxtBox.Text;
}
}
}
}
}
Chuyển hướng đến URL đến Webserver khác
Bạn có thể chuyển hướng đến trang web trên sever web bằng cách sử dụng phương thức Server.Transfer nhưng nó sẽ bung ra một ngoại lệ run time. Sử dụng đoạn mã tôi đang điều hướng đến trang chủ Google:
protected void Button4_Click(object sender, EventArgs e)
{
Server.Transfer("https://www.google.co.in/?gfe_rd=cr&ei=BpszVKXmIsPN8gfBi4GABg&gws_rd=ssl");
}
Chú ý quan trọng
- Chuyển request trang hiện tại vào trang aspx trên cùng máy chủ.
- Không thay đổi thanh địa chỉ.
- Bảo tồn các nguồn tài nguyên máy chủ và tránh được vòng lặp không cần thiết cho máy chủ.
- Không thể duy trì lịch sử.
- Không thay đổi URL trong thanh địa chỉ trong trường hợp này để nút quay lại không thể được sử dụng.
3. Server.Exceute
Nó cũng là một kỹ thuật định vị tương tự như Server.Transfer nhưng có hành vi khác khi thực hiện tiến trình này.
Server.Execute("WebForm3.aspx");
Khi sử dụng phương thức server.Exceute để điều hướng, nó giúp giữ lại control thực thi từ mã nguồn web. Trong ví dụ default.aspx trên là mã nguồn web từ nơi mà chúng ta đã chuyển đến webform3.aspx sử dụng server.exceute. Khi điều khiển phát hiện khối mã chuyển hướng nó di chuyển điều khiển và bắt đầu xử lý webform3.aspx nhưng không để lại điều khiển từ default.aspx và sau khi hoàn thành mục tiêu điều khiển biểu mẫu web một lần nữa chuyển khiển và chuyển sang mã nguồn web và thực hiện thêm mã xử lý trên trang default.aspx.
4. Cross page posting
Trong mẫu web ASP.NET là trang mặc định được đăng trên bản thân bất cứ khi nào nút được nhấp. HCross page posting cho phép đăng tải web để đăng bài trên web khác trên nút khác. Thuộc tính của nút PostBackURL được thiết lập đến trang mà bạn muốn làm qua trang soạn thảo.
Dưới đây là ví dụ về những gì chúng ta đang làm cho webform4.
Ví dụ
Mã sau đây cho thấy làm thế nào để lấy giá trị từ trang nguồn và hiển thị nó trang mục tiêu sau khi gửi bài qua trang vào bấm nút từ trang trước.
namespace NevigationTest
{
public partial class WebForm4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page pg = Page.PreviousPage;
if (pg != null)
{
Control placeHolder = pg.Controls[0].FindControl("MainContent");
TextBox prevTxtBox = (TextBox)placeHolder.FindControl("txtName");
if (prevTxtBox != null)
{
Label1.Text = prevTxtBox.Text;
}
}
}
}
}