7

Mam model z pewnymi właściwościami daty i czasu.Parametr DataFormatString atrybutu DisplayFormat nie działa, gdy jest używany z @ Html.TextBoxFor()

Właściwości czasowe mają następujące DataAnnotation:

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

i właściwości tej pory:

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

Jednak są one przestrzegane jedynie gdy używam @Html.EditorFor() i nie @Html.TextBoxFor().

Moja obecna sytuacja nie pozwoli mi korzystać z EditorFor, więc jak mogę zmusić TextBoxFor do przestrzegania tych ciągów formatów?

+0

dlaczego musisz używać 'TextBoxFor'? – DarthVader

+0

Sprawdzanie poprawności nie działa poprawnie z 'EditorFor's. Prowadzimy dochodzenie, ale nic się nie pojawia. – Kehlan

+0

sprawdzanie poprawności może być związane z 'CultureInfo', którego używasz w swojej aplikacji. – DarthVader

Odpowiedz

14

Można spróbować wykonać następujące czynności:

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

Jest też przeciążenie, że trwa atrybuty HTML, dzięki czemu można ustawić klasę CSS, drut się datepickers itp:

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

Dlaczego '@ class =" input-large "'? – Kehlan

+0

tylko dlatego, że możesz zastosować swoje style. takie jak jquery date picker – DarthVader

+0

Gotcha. Sądzę, że skończę z tym rozwiązaniem. – Kehlan

0

Być przedłużeniem Metoda może być utworzona:

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 }); 
    } 

metoda ToCustomDateFormat może być metodą rozszerzenia dla dat Typy eTime, które zwracają wartość ciągu w pożądanym formacie.

Zastosowanie:

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

ten sposób formatowania wszystkich zmiennej datetime może być sterowane z jednej funkcji. Sprawdziło się dobrze (dla właściwości DateTime i DateTime?), chociaż nie jestem pewien, czy skompilowanie wyrażenia w czasie wykonywania jest dobrym pomysłem.

0

Opcja zrobiłem tego:

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

W MVC5 można nazwać formatu wyświetlania zdefiniowanego w widoku unikając powielać format datetime, po prostu zakodować go w następujący sposób:

@Html.TextBoxFor(m => m.TotalAmount, Model.DOB.GetDateTimeFormats()[0]) 
Powiązane problemy