Cách tốt nhất để làm điều này là sử dụng nhà cung cấp giá trị tùy chỉnh. Mặc dù bạn có thể thực hiện việc này bằng cách sử dụng một trình kết nối mô hình tùy chỉnh hoàn chỉnh, nhưng đó là quá mức cần thiết dựa trên yêu cầu của bạn và dễ dàng hơn nhiều khi triển khai nhà cung cấp giá trị tùy chỉnh.
Để biết một số hướng dẫn về thời điểm bạn sử dụng chất kết dính mô hình tùy chỉnh và thời điểm sử dụng nhà cung cấp giá trị tùy chỉnh, hãy xem here và here.
Bạn chỉ có thể tạo nhà cung cấp giá trị tùy chỉnh để xử lý các giá trị tuyến đường có khóa "gắn cờ" và xử lý chuyển đổi int thành bool trong nhà cung cấp giá trị. Các mã để làm điều này trông giống như sau:
public class IntToBoolValueProvider : IValueProvider
{
public IntToBoolValueProvider(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
this._context = context;
}
public bool ContainsPrefix(string prefix)
{
return prefix.ToLower().IndexOf("flag") > -1;
}
public ValueProviderResult GetValue(string key)
{
if (ContainsPrefix(key))
{
int value = 0;
int.TryParse(_context.RouteData.Values[key].ToString(), out value);
bool result = value > 0;
return new ValueProviderResult(result, result.ToString(), CultureInfo.InvariantCulture);
}
else
{
return null;
}
}
ControllerContext _context;
}
public class IntToBoolValueProviderFactory : ValueProviderFactory
{
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
return new IntToBoolValueProvider(controllerContext);
}
}
Trong các nhà cung cấp giá trị, bạn thực hiện các phương pháp ContainsPrefix để trở về đúng cho các phím giá trị con đường bạn đang quan tâm, trong trường hợp này là chìa khóa "cờ". Trong cờ GetValue, bạn chuyển đổi giá trị của mục nhập dữ liệu tuyến "cờ" thành một int, và sau đó thành một boolean, tùy thuộc vào nếu int lớn hơn 0. Đối với tất cả các khóa dữ liệu tuyến đường khác không phải là "cờ", bạn chỉ trả lại giá trị rỗng, cho biết khung MVC bỏ qua ValueProvider này và chuyển sang các nhà cung cấp giá trị khác.
Để thực hiện điều này, bạn cần triển khai lớp con ValueProviderFactory để tạo nhà cung cấp IntToBoolValueProvider tùy chỉnh. Ngoài ra, bạn cần phải đăng ký nhà máy này với khung MVC. Bạn làm điều này trong toàn cầu.tuyến Asax sử dụng ValueProviderFactories lớp tĩnh:
protected void Application_Start()
{
ValueProviderFactories.Factories.Insert(0, new IntToBoolValueProviderFactory());
}
Nếu bạn sau đó có một con đường thiết lập như sau:
routes.MapRoute("", "{controller}/foo/{flag}", new { action = "Foo" });
tuyến đường này sẽ trực tiếp yêu cầu tới
http://localhost:60286/Home/Foo/{flag}
với phương pháp hành động
public ActionResult Foo(bool flag)
{
//Implement action method
return View("Index");
}
Khi nào phân đoạn {flag} lớn hơn 0, thông số đầu vào cờ bool sẽ là true và khi nó bằng 0, tham số cờ sẽ là false.
Thông tin thêm về nhà cung cấp giá trị tùy chỉnh MVC có thể được tìm thấy here.
bạn muốn tạo tuyến đường tùy chỉnh. 2 hoặc 3 người trong số họ. Thêm một số URL mẫu để làm việc. Cũng giải thích nếu những điểm kết thúc này sẽ thay đổi ở tất cả các tuyến đường tiêu chuẩn của bạn. Nếu họ làm (bắt đầu với một cái gì đó như bool) sẽ tốt hơn. –