Tìm kiếm Blog này

Hiển thị các bài đăng có nhãn ASP.NET / ASP.NET MVC.... Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn ASP.NET / ASP.NET MVC.... Hiển thị tất cả bài đăng

Thứ Hai, 17 tháng 1, 2011

Tùy biến địa chỉ Url cho website với ASP.NET MVC

Bài viết này mình sẽ nói làm thế nào để tùy biến địa chỉ url cho website với một vài thao tác đơn giản khi sửa đổi route và link để làm cho url thân thiện hơn!,đây là cách làm của mình,không biết thực tế người ta làm như thế nào nữa,nhưng kết quả theo mình cũng k tệ lắm,bắt chước gần giống với báo dân trí :D
Bình thường khi tạo một ứng dụng ASP.NET MVC,khi ta click vào một liên kết nào đó,nó sẽ gọi cho ta một action và truyền tham số tương ứng với action đó.
ví dụ trong hình ảnh sau : 
ảnh ghi url
tương ứng trong HomeController có 1 Action Xem với tham số truyền vào là id=13,nó sẽ trả về một bản ghi có khóa là 13,,nội dung là một bài viết của chúng ta! url được sinh ra tương ứng là
http://localhost:4021/Home/Xem/13  khi đó nếu phía sau id=13 ta chèn thêm một chuỗi ví dụ như http://localhost:4021/Home/Xem/13/Gioi-Thieu-Hue thì browser sẽ báo lỗi liền,do nó không tìm thấy được cái request url và thông báo lỗi : 


Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Home/Xem/17/Gioi-Thieu-Hue 


Khi duyệt web trên mạng,việc click vào một cái link trên đó thể hiện rõ một phần nội dung của bài viết thì thật tiện lợi cho người sử dụng và bộ máy tìm kiếm,ví dụ bạn đọc báo dân trí với đường link sau http://dantri.com.vn/c728/s728-436018/cu-ong-84-tuoi-thi-tot-nghiep-tieu-hoc.htm thì nhìn cũng dễ chịu hơn. ở cấp độ đơn giản,chúng ta cũng sẽ làm việc tương tự để áp dụng vào website của mình. Rất may cho chúng ta,ASP.NET MVC đã cung cấp một bộ định tuyến rất dễ dàng để cài đặt vấn đề này,chỉ với 2 bước đơn giản,bạn sẽ có một url như ý .
trong View của Action hiện ra danh sách các bài viết ,ta tiến hành đặt lại link xem Details như sau 


<%: Html.ActionLink("Details", "Xem/"+item.Id.ToString()+"/"+item.TenBaiViet.ToString().Replace(' ','-'))%> | 
  thêm vào một đối tượng route trong bảng route trong file Global.asax



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace myRoute.Web
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
               "Xem", // Route name
               "Home/Xem/{id}/{op}", // URL with parameters
               new { controller = "Home", action = "Xem", id = UrlParameter.Optional } // Parameter defaults
           );
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);
        }
    }
} 


rồi thôi xong!
Giải thích code: 

<%: Html.ActionLink("Details", "Xem/"+item.Id.ToString()+"/"+item.TenBaiViet.ToString().Replace(' ','-'))%> 

ta sẽ tiến hành tùy biến url thành dạng:  Xem/[số id của bài viết]/[Tên-bài-Viết] để được url ví dụ như Home/Xem/13/Gioi-Thieu-Hue
và trong file Global.asax nó sẽ bắt cái url này và dịch ra rằng,nếu bạn yêu cầu một url có dạng như Home/Xem/13/Gioi-Thieu-Hue 
tôi sẽ thực hiện action Xem với id lấy từ UrlParametter trong controller Home cho bạn,và nó sẽ trả về một view tương ứng với id đó,
còn chuỗi phía sau sẽ là tùy chọn,khi đó url chúng ta sẽ dễ hiểu hơn nhiều.
Mình không biết bộ SEO Optimize nó hoạt động ntn,nhưng mình cũng bắt chước được gần giống thế :d,url chấp nhận cả tiếng việt nữa :D
và đây là kết quả 
các bạn cần cài đặt thêm một hàm chuyển chữ có dấu sang dạng chữ tiếng việt không dấu nữa.Hàm đó có thể 
viết như thế này :
  /// <summary>
        /// Chuyển chuỗi có dấu sang không dấu
        /// </summary>
        /// <param name="s">Chuỗi cần chuyển đổi</param>
        /// <returns>Chuỗi sau khi chuyển đổi</returns>
        public static  string Convert_Chuoi_Khong_Dau(string s)
        {
            Regex regex = new Regex(@"\p{IsCombiningDiacriticalMarks}+");
            string strFormD = s.Normalize(NormalizationForm.FormD);
            return regex.Replace(strFormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');
        }
 



ASP.NET MVC Tutorial – Hướng dẫn học từng bước ASP.NET MVC


Nếu bạn là người phát triển ứng dụng trên nền .NET hẳn nhiên sẽ không thể bỏ qua được mồ hình phát triển ứng dụng ASP.NET MVC.
ASP.NET MVC hoàn toàn miễn phí và hỗ trợ đầy đủ .NET framework trong việc xây dựng các website theo mô hình MVC (Model – View – Controller). ASP.NET MVC được xây dựng trên nền ASP.NET (giống như ASP.NET Web Forms)
Tại sao ta nên dùng ASP.NET MVC?
  • ASP.NET MVC cung cấp một tập đầy đủ các control thông qua mã HTML
  • Hỗ trợ tích hợp AJAX
  • Phân tách rõ ràng các đối tượng/ thành phần tạo nên 1 ứng dụng web do đó việc bảo trì hay mở rộng trở nên dễ dàng (khi ứng dụng đã theo chuẩn)
  • Hỗ trợ test tốt
Và còn nhiều cái tốt khác khi ASP.NET MVC kế thừa từ các mô hình MVC đã trở nên rất nổi tiếng trước đó, bạn hãy dành thời gian để find out!
mvc-original
Bây giờ ta nên học nó thế nào?
Rất đơn giản, học bằng cách FOLLOW tutorial này (download file PDF về cho tiện theo dõi): http://cid-3441cd967dbdeab3.skydrive.live.com/self.aspx/ASPMVC/aspnetmvc-nerdinner%7C_v1.rar (Nên tạo 1 cái calendar và học từng ngày, mình nghĩ khoảng 20 tới 30 ngày là co thể tự tay làm 1 web MVC rồi đó!)
Nếu theo đúng tutorial trên nghĩa là bạn đã xây dựng được 1 ứng dụng web nhà hàng ASP.NET MVC khá hoàn chỉnh. Và tốt nhất là  download ví dụ này về để FOLLOW code + design pattern! http://cid-3441cd967dbdeab3.skydrive.live.com/self.aspx/ASPMVC/NerdDinner%201.0.zip
Ngoài ra tutorial sau đây cũng rất hay (và lại còn bằng tiếng Việt nữa: http://www.mediafire.com/download.php?twmjfg00jyi
Tham khảo:

Thứ Bảy, 15 tháng 1, 2011

ASP.NET - MVC - ASP và MVC Chapter 3 - Part 6

2.7 Câu truc Views\Shared\Site.Master


01.<%@ Master Language="C#" AutoEventWireup="true"CodeBehind="Site.master.cs" Inherits="BanHang.Views.Shared.Site"%>
02.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd<;/a>">
03.<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml<;/a>">
04.<head runat="server">
05.<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
06.<title><%= Html.Encode(ViewData["Title"]) %></title>
07.<link href="/../../Content/Site.css" rel="stylesheet"type="text/css" />
08.</head>
09.<body>
10.<div class="page">
11.<div id="header">
12.<div id="title">
13.<h1>My Sample MVC Application</h1>
14.</div>
15.<div id="logindisplay">
16.<% Html.RenderPartial("LoginUserControl"); %>
17.</div>
18.<div id="menucontainer">
19.<ul id="menu">
20.<li><%= Html.ActionLink("Home""Index""Home")%></li>
21.<li><%= Html.ActionLink("SanPham""Index""SanPham")%></li>
22.<li><%= Html.ActionLink("About Us""About""Home")%></li>
23.</ul>
24.</div>
25.</div>
26.<div id="main">
27.<asp:ContentPlaceHolder ID="MainContent" runat="server" />
28. 
29.<div id="footer">
30.My Sample MVC Application © Copyright 2008
31.</div>
32.</div>
33.</div>
34.</body>
35.</html>

2.8 Kêt qua

Figure 17. Kêt qua chay ưng dung khi thêm SanPham vao ưng dung ASP.NET MVC