2011-11-29 11 views
6

Mam model z właściwością DateTime, która w jednym miejscu jest umieszczona w ukrytym polu wejściowym.Format ASP.NET MVC z ukrytą datą czasową

@Html.HiddenFor(m => m.StartDate) 

który generuje następujący kod HTML:

<input id="StartDate" name="StartDate" type="hidden" value="1/1/2011 12:00:00 AM" > 

Problemem jest to, że czas jest wliczone w wartość i moja data zwyczaj walidacja spodziewa datę w formacie ##/##/# ### powodując tym samym niepowodzenie sprawdzania poprawności. Mogę łatwo zmienić moją niestandardową walidację daty, aby ta sytuacja zadziałała, ale wolałbym, aby to pole ukryło wartość we właściwym formacie.

Próbowałem użyć atrybutu DisplayFormat we właściwości modelu, ale to nie zmienia formatu ukrytych danych wejściowych.

Zdaję sobie sprawę, że mogłem po prostu ręcznie utworzyć ukryte dane wejściowe i zadzwonić do StartDate.ToString ("MM/dd/rrrr") dla wartości, ale używam również tego modelu w dynamicznie generowanej liście pozycji, więc dane wejściowe są indeksowane i mają identyfikatory, takie jak Collection [Some-Guid] .StartDate, co sprawiłoby, że nieco trudniej było znaleźć id i nazwę danych wejściowych.

Czy jest mimo to, aby wartość "wartości" była wyświetlana w określonym formacie podczas renderowania pola na stronie jako ukrytego wejścia?

Odpowiedz

9

Można użyć szablonu niestandardowego Redaktor:

public class MyViewModel 
{ 
    [UIHint("MyHiddenDate")] 
    public DateTime Date { get; set; } 
} 

a następnie zdefiniować ~/Views/Shared/EditorTemplates/MyHiddenDate.cshtml:

@model DateTime 
@Html.Hidden("", Model.ToString("dd/MM/yyyy")) 

i wreszcie w widoku użyć EditorFor pomocnika:

@model MyViewModel 
@Html.EditorFor(x => x.Date) 

Ta wola renderuj niestandardowy szablon edytora dlaWłaściwośćmodelu widoku, a następnie wyrenderować ukryte pole z wartością przy użyciu żądanego formatu.

+1

Pracował jak urok. Jedyną wadą jest to, że muszę mieć osobny model dla tej instancji, gdy pole jest ukryte, niż gdy faktycznie potrzebuję go do edycji. Ale to naprawdę nie jest złe. –