2009-12-07 30 views
9

Làm cách nào để chuyển một ngày qua URL?Làm cách nào để vượt qua một ngày qua URL, cho Hành động của tôi để đọc trong MVC?

Đây là những gì tôi đang cố gắng để làm, như như bạn sẽ thấy ngày sử dụng phía trước dấu gạch chéo mà không hợp lệ trong URL

http://localhost/Controller/Action/id=0d5375aa-6d43-42f1-91f0-ea73d9beb361&date=02/12/2009 
+0

Bạn có phải chuyển nó trong URL không? Sử dụng QueryString hoặc Dict khác có sẵn trên các trang .. – Brad8118

Trả lời

4

Bạn có thể chuyển ngày trong chuỗi truy vấn bằng cách sử dụng định dạng cụ thể, giả sử yyyymmdd rồi phân tích cú pháp chính xác trong Bộ điều khiển của bạn.

&date=02/12/2009 
change to 
&date=20091202 (yyyymmdd) 

Bạn có thể tạo trình bao bọc xung quanh đối tượng DateTime được khởi tạo bằng định dạng mới này hoặc chỉ phân tích cú pháp đó trong Bộ điều khiển.

public MyWrapperDate(int date) 
{ 
    int year = date/10000; 
    int month = ((date - (10000 * year))/100); 
    int day = (date - (10000 * year) - (100 * month)); 

    this.DateTimeObject = new DateTime(year, month, day); 
} 
0

Bạn có thể mã hóa url nó, nhưng đi qua một DateTime xung quanh như một chuỗi luôn luôn là một chút khó khăn bởi vì bạn có thể chạy vào lỗi phân tích cú pháp nếu yêu cầu bao giờ vượt qua ranh giới văn hóa.

Tùy chọn tốt hơn là chuyển đổi DateTime thành Ticks và chuyển số đó xung quanh.

+0

Cách sử dụng định dạng ISO (yyyy-MM-dd)? Chúng ta vẫn cần chuyển đổi sang ve. – maxspan

0

MVC sử dụng văn hóa hiện tại khi tạo URL và mô hình ràng buộc. Nó có ý nghĩa trong một số kịch bản (như khi bạn có một hộp văn bản và người dùng nhập ngày ở đó) nhưng thường có vấn đề. Nếu bạn có các nền văn hóa khác nhau thì sẽ dễ dàng hơn nếu các giá trị luôn ở định dạng cho văn hóa bất biến.

Trong trường hợp của bạn, tôi sẽ chuyển giá trị dưới dạng chuỗi được hiển thị bằng văn bản bất biến. Sau đó, tôi sẽ sử dụng một CustomModelBinder để điền vào các tài sản trong Model.

13

Chuẩn ISO 8601 là yyyy-MM-dd, rõ ràng và không chứa bất kỳ ký tự URL không hợp lệ nào và hoạt động tốt trong DateTime.Parse/TryParse.

Một tùy chọn khác là sử dụng bất kỳ định dạng nào bạn muốn và chỉ cần mã hóa URL bằng cách sử dụng HttpServerUtility.UrlEncode/UrlDecode.

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