2012-09-22 29 views
6

Tôi đang làm việc trên cung cấp tên thân thiện cho bộ điều khiển MVC 4 của tôi và tôi muốn làm một cái gì đó giống như phong cách [ActionName="My-Friendly-Name"], nhưng cho toàn bộ bộ điều khiển.C# MVC 4 ControllerName thuộc tính

Tôi không thể tìm thấy bất kỳ thông tin nào về thuộc tính như vậy, vì vậy tôi sẽ làm như thế nào? Ngoài ra, tôi sẽ cần phải thêm một MapRoute mới để xử lý nó?

EDIT:

Ví dụ, tôi muốn chuyển hướng url sau:

http://mysite.com/my-reports/Details/5 

được chuyển đến bộ điều khiển sau:

[ControllerClass="my-reports"] // This attribute is made up. I'd like to know how to make this functionality 
public class ReportsController : Controller 
{ 
    // 
    // GET: /Reports/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ViewResult Details(int id) 
    { 
     Report report = db.Reports.Single(g => g.Id == id); 
     return View(report); 
    } 

    public ActionResult Create() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Create(Report item) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       item.Id = Guid.NewGuid(); 
       _context.Reports.AddObject(item); 
       _context.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(item); 
     } 
     catch (Exception) 
     { 
      return View(item); 
     } 
    } 

}

Trả lời

-1

tôi không biết nếu có câu trả lời cho câu hỏi của bạn, nhưng ngay cả khi có một câu hỏi, tại sao trên thế giới bạn lại làm như vậy g? Tại sao không làm theo cách tiêu chuẩn: gọi lớp điều khiển bất cứ điều gì bạn thích (miễn là nó có ý nghĩa) và có nó được gọi là bởi khuôn khổ cho bạn? Tại sao tạo hai quy ước đặt tên nhân tạo và ánh xạ giữa chúng? Tôi thấy không phải là một lợi ích duy nhất, nhưng nhiều khuyết điểm. Chẳng hạn như - nó khó khăn hơn để đọc, khó duy trì hơn, khó khăn hơn để hiểu, nó cũng là không đáng kể, nhưng vẫn còn, một chủng trên hiệu suất ...

Cập nhật

Hãy nhìn vào gửi bài này, tôi nghĩ họ đã giải quyết được vấn đề mà bạn đang nói đến.

Xin vui lòng cho tôi biết nếu nó là của bất kỳ sự giúp đỡ cho bạn.

+0

Lý do là vì một số định tuyến xảy ra dựa trên giá trị được lưu trữ trong cơ sở dữ liệu (Vì vậy, thay vì có url là '/ Items/5', url có thể giống như'/Media/Music/Somebody-to-Love ') và điều này đã gây ra một vài biến chứng đặc biệt mà cách dễ nhất để sửa chữa sẽ là cho phép các chức năng tương tự như' [ActionName] 'nhưng đối với bộ điều khiển. Nếu không có giải pháp, tôi sẽ phải tìm ra cách khác. Tôi chắc chắn có, đây chỉ là suy nghĩ đầu tiên của tôi :) –

+1

Mát mẻ, hiểu, hãy nhìn vào bản cập nhật trong câu trả lời của tôi. –

+0

Một số tùy chỉnh của tôi thích http://www.domain.com/produkter thay vì http://www.domain.com/product. Tôi không muốn có ProdukterController và trộn bằng tiếng Thụy Điển trong mã của tôi. Tôi đã giải quyết nó bằng cách sử dụng AttributeRouting để tạo các tuyến tùy chỉnh cho tất cả các bộ điều khiển và hành động của tôi. –

6

Thêm một tuyến đường tùy chỉnh mà sẽ phù hợp với tên cụ thể của bạn:

routes.MapRoute(
    "MyCustomRoute", 
    "My-Friendly-Name/{action}/{id}", 
    new { controller = "ReportsController", action = "Index", id = "" } 
); 

Bây giờ mỗi url có chứa "My-Friendly-Name" cho bộ điều khiển sẽ sử dụng tuyến đường mới của bạn.

2

Thanh toán this post, đặc biệt là nơi nó nói về Định dạng tuyến đường.

Các vấn đề liên quan