Dấu hai chấm trong url của ví dụ đầu tiên của bạn sẽ gây ra lỗi (Yêu cầu không hợp lệ) để bạn không thể thực hiện chính xác những gì bạn đang tìm kiếm. Ngoài ra, sử dụng DateTime như một tham số hành động chắc chắn nhất có thể.
Nếu bạn đang sử dụng định tuyến mặc định, phần thứ ba này của url mẫu sẽ lấy giá trị DateTime làm thông số {id}. Vì vậy, phương thức Hành động của bạn có thể trông giống như sau:
public ActionResult Index(DateTime? id)
{
return View();
}
Có thể bạn sẽ muốn sử dụng Thời gian không có thứ tự như tôi có, vì vậy nếu thông số này không được bao gồm, nó sẽ không gây ra ngoại lệ. Tất nhiên, nếu bạn không muốn nó được đặt tên là "id" thì hãy thêm một mục nhập thay thế khác {id} bằng tên bạn chọn.
Miễn là văn bản trong url sẽ phân tích cú pháp thành giá trị Ngày giờ hợp lệ, đây là tất cả những gì bạn phải làm. Một cái gì đó như sau hoạt động tốt và sẽ được chọn trong phương pháp hành động của bạn mà không có bất kỳ lỗi nào:
<%=Html.ActionLink("link", "Index", new { id = DateTime.Now.ToString("dd-MM-yyyy") }) %>
Bắt, trong trường hợp này, là tôi không bao gồm thời gian. Tôi không chắc chắn có bất kỳ cách nào để định dạng chuỗi ngày (hợp lệ) với thời gian không được đại diện bằng dấu hai chấm, vì vậy nếu bạn PHẢI bao gồm thời gian trong url, bạn có thể cần phải sử dụng định dạng của riêng mình và phân tích kết quả trở lại một DateTime bằng tay. Giả sử chúng ta thay thế dấu hai chấm bằng dấu "!" trong liên kết hành động: new { id = DateTime.Now.ToString("dd-MM-yyyy HH!mm") }
.
phương pháp hành động của bạn sẽ thất bại trong việc phân tích này như một ngày để đặt cược tốt nhất trong trường hợp này có lẽ phải chấp nhận nó như là một chuỗi:
public ActionResult Index(string id)
{
DateTime myDate;
if (!string.IsNullOrEmpty(id))
{
myDate = DateTime.Parse(id.Replace("!", ":"));
}
return View();
}
Edit: Như đã đề cập trong các ý kiến, có một số giải pháp khác được cho là tốt hơn tôi. Khi tôi viết câu trả lời này lần đầu tiên, tôi tin rằng tôi đang cố gắng giữ nguyên bản chất của định dạng ngày tháng nhất có thể, nhưng mã hóa URL rõ ràng sẽ là cách xử lý đúng đắn hơn. 1 nhận xét của Vlad.
Cảm ơn bạn đã xem tổng quan toàn diện. Tôi cần phải nhận thời gian như một phần của tham số, bởi vì đây là một loại ứng dụng định tuyến, nơi các chuyến đi có thời gian mong muốn. Vì vậy, tôi nghĩ rằng tôi sẽ gắn bó với phương pháp định dạng tùy chỉnh của tôi. – GilShalit
Bạn hoàn toàn có thể chuyển giá trị ngày VÀ thời gian qua chuỗi truy vấn mà không phải dùng đến các phần mềm như Thay thế ("!", ":"). Bạn chỉ cần mã hóa url các dấu chấm phẩy - bạn có thể làm điều này trong Javascript bằng cách sử dụng phương thức ** encodeURIComponent **. – Vlad
Bạn có thể vượt qua chỉ là ngày và sau đó vượt qua trong một giá trị số nguyên như một param thứ hai là secconds/phút từ nửa đêm sau đó chỉ cần thêm chúng trở lại trong hành động –