7

Tôi có một kiểu có một số thuộc tính ngày và giờ.Tham số DataFormatString của thuộc tính DisplayFormat không hoạt động khi được sử dụng với @ Html.TextBoxFor()

Các đặc tính thời gian có DataAnnotation sau:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")] 

Và các thuộc tính ngày có:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 

Tuy nhiên những chỉ tôn trọng khi tôi sử dụng @Html.EditorFor() và không @Html.TextBoxFor().

Tình trạng hiện tại của tôi sẽ không cho phép tôi sử dụng EditorFor, vậy làm cách nào để buộc TextBoxFor tôn trọng các chuỗi định dạng này?

+0

tại sao bạn phải sử dụng 'TextBoxFor'? – DarthVader

+0

Xác thực không hoạt động đúng với 'EditorFor's. Chúng tôi đã điều tra mà không có gì bật lên. – Kehlan

+0

xác thực có thể liên quan đến 'CultureInfo' mà bạn đang sử dụng trong ứng dụng của mình. – DarthVader

Trả lời

14

Bạn có thể thử như sau:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}") 

Ngoài ra còn có một tình trạng quá tải mà có thuộc tính html, vì vậy bạn có thể thiết lập các lớp CSS, dây lên datepickers, vv:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" }) 
+0

Tại sao '@ class =" input-large "'? – Kehlan

+0

chỉ cần nói rằng bạn có thể áp dụng phong cách của mình. chẳng hạn như bộ chọn ngày tháng jquery – DarthVader

+0

Gotcha. Hãy suy nghĩ tôi sẽ kết thúc với giải pháp này. – Kehlan

0

Có lẽ một phần mở rộng có thể được tạo:

public static MvcHtmlString DateTimeFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) 
    { 
     var compilationResult = expression.Compile(); 
     TValue dateValue = compilationResult((TModel)html.ViewDataContainer.ViewData.Model); 
     var body = (MemberExpression)expression.Body; 
     return html.TextBox(body.Member.Name, (Convert.ToDateTime(dateValue)).ToCustomDateFormat(), new { id = body.Member.Name, datepicker = true }); 
    } 

phương thức ToCustomDateFormat có thể là một phương pháp mở rộng cho dat Các kiểu eTime trả về giá trị chuỗi theo định dạng mong muốn.

Cách sử dụng:

@Html.DateTimeFor(x=>x.AnyDateTimeProperty) 

Bằng cách này, các định dạng của tất cả các biến datetime có thể được điều khiển từ một chức năng duy nhất. Làm việc tốt cho tôi (đối với DateTimeDateTime? thuộc tính), mặc dù tôi không chắc chắn nếu biên dịch biểu thức trên thời gian chạy là một ý tưởng hay.

0

Một lựa chọn Tôi đã làm cho điều này:

@Html.TextBoxFor(m => m.Patient.DOB, new { @Value = string.Format("{0:MM/dd/yyyy}", Model.EndDate) }) 
0

Trong MVC5 bạn có thể gọi định dạng hiển thị được xác định theo quan điểm của bạn tránh lặp lại trong các định dạng datetime, chỉ cần mã hóa nó theo cách sau:

@Html.TextBoxFor(m => m.TotalAmount, Model.DOB.GetDateTimeFormats()[0]) 
Các vấn đề liên quan