Hiện nay tôi có một cấu trúc thư mục như thế này:MVC khu vực Routing - Bộ điều khiển thư mục với Folder
Area (folder)
- Toolkit (folder)
- Controllers (folder)
- AdminController.cs
- Views (folder)
- Admin (folder)
- Privledges (folder)
- Create.cshtml
- Edit.cshtml
- Delete.cshtml
Những dịch để
/Toolkit/{controller}/{action}/{tool}/{id}
Có một thực tế xấu để thiết lập các hành động cư xử giống như một bộ điều khiển phục vụ một khung nhìn dựa trên tham số chuỗi {tool} và tham số {id} được truyền cho hành động?
Việc thực hiện những gì tôi đang nói về:
private const string FOLDER_PRIVILEGES = "./Privileges/";
public ActionResult Privileges(string tool, string id = "")
{
dynamic viewModel = null;
ToolViews view; // enum for the views
// Parse the tool name to get the enum representation of the view requested
bool isParsed = Enum.TryParse(tool, out view);
if (!isParsed)
{
return HttpNotFound();
}
switch (view)
{
case ToolViews.Index:
viewModel = GetIndexViewModel(); // call a function that gets the VM
break;
case ToolViews.Edit:
viewModel = GetEditViewModelById(int.Parse(id)); // sloppy parse
break;
default:
viewModel = GetIndexViewModel();
break;
}
// The folder path is needed to reach the correct view, is this bad?
// Should I just create a more specific controller even though it would
// require making about 15-20 controllers?
return View(FOLDER_PRIVILEGES + tool, viewModel);
}
Khi tôi viết một View, tôi phải chắc chắn rằng tên đường dẫn được sử dụng cho các thư mục
@Html.ActionLink("Edit", "./Toolkit/Admin/Priveleges/Edit", "Admin", new { id = item.id })
Điều này dường như là một thực tế kém, bởi vì nếu cấu trúc thư mục thay đổi ở tất cả, nó sẽ đòi hỏi nhiều bảo trì.
Tuy nhiên, nếu tôi phải giải quyết các hành động trong bộ điều khiển thì sẽ có nhiều người trong số họ (gần 20 người được thêm vào theo thời gian).
Nếu những gì tôi đang làm là thực hành không tốt, cách tốt nhất để phục vụ tuyến đường như thế này là gì?
/Toolkit/Admin/Privileges/Edit/1
Tôi muốn tránh làm như sau:
/Toolkit/Admin/CreatePrivileges/1
/Toolkit/Admin/EditPrivileges/1
/Toolkit/Admin/DeletePrivileges/1
Xin vui lòng cho tôi biết nếu tôi không thực hiện bất kỳ nghĩa nào đó, bởi vì tôi có một thời gian khó khăn đặt câu hỏi này vào từ ngữ.
Có lẽ tôi hiểu lầm, nhưng việc sử dụng mẫu của bạn có phải là bạn sẽ tạo ra một hàm riêng biệt để trả về kiểu xem thích hợp tùy thuộc vào 'ToolViews' enum anyways không? Toàn bộ điểm của MVC là quy ước về cấu hình. Vì quy ước trong MVC là một hành động riêng biệt để xử lý từng khả năng riêng biệt, có vẻ như đó là "thực hành tốt nhất" để đi với ví dụ thứ hai của bạn. IE:/Toolkit/Admin/CreatePrivileges/1. –
Tôi đã quyết định rằng nếu tôi muốn một URL tiêu hóa, tôi cần phải chia nhỏ nó thành các bộ điều khiển nhỏ hơn. Nó có thể là một chút khó chịu để có một loạt các bộ điều khiển, nhưng nó tốt hơn so với những gì tôi đã cố gắng làm trước đây. Thay vì làm/Toolkit/Admin/CreatePrivileges/1 Tôi có/Toolkit/Privileges/Create/1. Tôi nhận ra rằng phần/Admin/không thực sự quan trọng với URL khi tôi có nhiều bộ điều khiển nhỏ hơn. –
Vì vậy, tôi nghĩ chúng tôi đồng ý? –