2013-08-02 37 views
5

Có cách nào đó có thể đặt tên thay thế cho tham số chuỗi truy vấn trong ASP.NET MVC không?Tên thay thế cho tham số chuỗi truy vấn

Tôi có controller action Index đơn giản này:

public ActionResult Index(color = "") 
{ 
    ... 
} 

Calling http://mysite.com/mypage/?color=yellow tác phẩm khá độc đáo, tham số color tự động nhặt giá trị của nó "vàng" từ chuỗi truy vấn.

Nhưng bây giờ tôi muốn có một biến thể được bản địa hoá của cùng một trang, với các tham số địa phương “đẹp”, nhưng vẫn làm việc với cùng một phương pháp điều khiển. Ví dụ: http://mysite.com/mypage/?farve=gul. Ở đây tôi muốn “gul” được chuyển thành tham số color theo phương thức ation Index() mặc định.

Làm cách nào để đặt ánh xạ cho tên thay thế cho tham số chuỗi truy vấn?

+0

thể Dupe: http://stackoverflow.com/questions/2146227/how-to-route-a-multiple-language-url-with-a-mvc – Abhitalks

Trả lời

6

Làm cách nào để đặt ánh xạ cho tên thay thế cho tham số chuỗi truy vấn?

Bạn có thể viết mô hình tùy chỉnh.

Vì vậy, như trong mọi ứng dụng ASP.NET MVC bạn bắt đầu bằng cách viết một mô hình điểm:

public class MyViewModel 
{ 
    public string Color { get; set; } 
} 

và sau đó một mô hình chất kết dính cho mô hình này:

public class MyViewModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var query = controllerContext.HttpContext.Request.QueryString; 
     var value = query["color"] ?? query["gul"] ?? query["couleur"]; 
     return new MyViewModel 
     { 
      Color = value, 
     }; 
    } 
} 

mà sẽ được đăng ký tại của bạn Application_Start:

ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder()); 

và bây giờ hành động điều khiển của bạn có thể có dạng xem tham số:

public ActionResult Index(MyViewModel model) 
{ 
    ... 
} 

Tất nhiên bạn có thể làm cho các mô hình chất kết dính linh hoạt hơn bằng cách sử dụng một số thuộc tính tùy chỉnh trên tài sản:

public class MyViewModel 
{ 
    [PossibleQueries("color", "gul", "couleur")] 
    public string Color { get; set; } 
} 

và trong mô hình binder đọc những giá trị đó và cố gắng đọc chúng từ truy vấn chuỗi cho đến khi bạn tìm thấy một chuỗi không phải là rỗng.

+0

Cảm ơn, tôi thực hiện một mô hình tùy chỉnh chất kết dính - hoạt động hoàn hảo. :) –

0

Làm thế nào về một bộ điều khiển thứ hai với một tên địa phương/đẹp, nơi các hành động và thông số đã bản địa hoá tên và gọi hành động từ bộ điều khiển mặc định/tiếng Anh? Với phương pháp này, bạn có tất cả các phần của url được bản địa hóa.

Controller mypage 
{ 
    ActionResult Index(string color) 
    { 
     // normal code 
    } 
} 

Controller meineseite 
{ 
    ActionResult Index(string farbe) 
    { 
     return mypage.Index(farbe); 
    } 
} 
Các vấn đề liên quan