/ / Utwórz szablon edytora dla DateTime z trzema polami wejściowymi dla dnia, miesiąca, roku, w MVC - c #, asp.net-mvc, asp.net-mvc-3, datetime, datetimepicker

Utwórz szablon edytora dla DateTime z trzema polami wejściowymi dla dnia, miesiąca, roku, w MVC - c #, asp.net-mvc, asp.net-mvc-3, datetime, datetimepicker

Chciałbym utworzyć szablon edytora dla DateTime? pole, które ma 3 pola tekstowe dla dnia, miesiąca, roku. Obecnie mój EditorTemplates / Date.cshtml wygląda następująco:

@Html.TextBox(string.Empty, Model.HasValue ? Model.Value.Day.ToString() : "",
new { @class = "day-box", title = "day", min = "1", max = "31", type = "number" })
@Html.TextBox(string.Empty, Model.HasValue ? Model.Value.Month.ToString() : "",
new { @class = "month-box", title = "month", min = "1", max = "12", type = "number" })
@Html.TextBox(string.Empty, Model.HasValue ? Model.Value.Year.ToString() : "",
new { @class = "year-box", title = "year", min = "1900", max = "2020", type = "number" })

Oczywistym problemem jest to, że (jak jest) atrybuty id i name zostają ustawione na tę samą wartość. Muszę dodać coś do tych wartości i nigdy nie wrócić do mojego modelu.

Miałem nadzieję, że dodanie _Day do identyfikatora i .Day do nazwy danych wejściowych Dzień, podobnie dla miesiąca i roku rozwiąże problem. Ale nie widzę łatwego sposobu na zrobienie tego.

Miałem zamiar użyć Ukrytego wejścia dla rzeczywistej wartości, a następnie użyć javascript do aktualizacji wartości ukrytego pola za każdym razem, gdy wartość zmienia się w jednym z moich trzech (d / m / r) pól tekstowych.

Czy jest więc sposób na uzyskanie nazwy i identyfikatora, którego będzie używał MVC, gdy przekażę ciąg. Pusty? Korzystanie z ViewData.TemplateInfo.HtmlPrefix nie wydaje się dawać pełnej wartości.

Czy jest lepszy sposób na robienie tego, co chcę? Nie mogę sobie wyobrazić, że jestem pierwszym, który to rozwiązał.

Wiem, że istnieją tam zewnętrzne urządzenia do wybierania dat. Ze względu na ten problem nie jestem nimi zainteresowany.

Dzięki, ~ S

Odpowiedzi:

1 dla odpowiedzi № 1

Miałem Data Miesiąc Dzień DateTime regulowany, możesz to zrobić na swoim DateTime.cshtml EditorTemplates

@model System.DateTime
@Html.TextBoxFor(model => model.Year) / @Html.TextBoxFor(model => model.Month) / @Html.TextBoxFor(model => model.Day)

Powyższe nie jest możliwe. Data, miesiąc i dzień DateTime są tylko do odczytu.

Co możesz zrobić, to po prostu utworzyć osobny typ danych:

public struct DatePart
{
public int Year { get; set; }
public int Month { get; set; }
public int Day { get; set; }

public DateTime Date { get { return new DateTime(Year, Month, Day); } }
}

Następnie zrób to w dniu EditorTemplates

@model TestV.Models.DatePart
@Html.TextBoxFor(model => model.Year) / @Html.TextBoxFor(model => model.Month) / @Html.TextBoxFor(model => model.Day)

Następnie po prostu uzyskaj dostęp do właściwości DatePart (typ DateTime)


0 dla odpowiedzi nr 2

Możesz utworzyć datę z trzech pól w swoim szablonie niestandardowym za pomocą javascript i napisać ją w ukrytym polu, które będzie powiązane z Twoim modelem.