Eu tenho o seguinte código de navalha que desejo ter o mm/dd/yyyy
formato de data:
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
Eu tentei várias abordagens diferentes, mas nenhuma delas funciona na minha situação
meu AuditDate é um DateTime?
tipo
Eu tentei algo assim e recebi este erro:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Informações adicionais: os modelos podem ser usados apenas com acesso a campo, acesso de propriedade, índice de matriz de dimensão única ou expressões de indexador personalizadas de parâmetro único.
Tentei isso:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Sem sobrecarga para o método 'ToString' leva 1 argumento
fonte
No overload for method 'ToString' takes 1 arguments
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
à propriedade:[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. Deveria ser óbvio, mas quando vocês não têm tempo para perder, copiar e colar, essa dica do intellisense pode passar pelo seu nariz como passou pelo meu :)Se você está simplesmente emitindo o valor dessa propriedade de modelo, não precisa do
DisplayFor
helper html, apenas chame-o diretamente com a formatação de string adequada .Audit Date: @Model.AuditDate.Value.ToString("d")
Deve produzir
Audit Date: 1/21/2015
Por último, sua data de auditoria pode ser nula, portanto, você deve fazer a verificação condicional antes de tentar formatar um valor anulável.
@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
Procurar no Google o erro que você está obtendo fornece esta resposta , que mostra que o erro é devido ao uso da palavra Model em seus helpers Html. Por exemplo, usando
@Html.DisplayFor(Model=>Model.someProperty)
. Altere-os para usar algo diferente deModel
, por exemplo:@Html.DisplayFor(x=>x.someProperty)
ou altere a maiúsculaM
para minúsculasm
nesses auxiliares.fonte
@Model.AuditDate.Value.ToString("d")
Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
Html.DisplayFor
auxiliar. Não faça isso. Além disso, você tem certeza de que está gerando o erro nessa linha e não em alguma outra propriedade na qual está tentando usar oDisplayFor
helper?@Model...
, estou recebendo este erro: 'Model' está em conflito com a declaração System.Web.Mvc.WebViewPage <TModel> .Model 'Tenho usado esta mudança em meu código:
código antigo:
<td> @Html.DisplayFor(modelItem => item.dataakt) </td>
Novo :
<td> @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy") </td>
fonte
A resposta de @ChrisPratt sobre o uso do modelo de exibição está errada. O código correto para fazer funcionar é:
@model DateTime? @if (Model.HasValue) { @Convert.ToDateTime(Model).ToString("MM/dd/yyyy") }
Isso porque o
.ToString()
forNullable<DateTime>
não aceita oFormat
parâmetro .fonte
Eu implementei algo semelhante desta forma:
2. Dê contorno zero e borda zero para TextBox em css.
.my-style { outline: none; border: none; }
E ...... Está feito :)
fonte
Para mim foi o suficiente para usar
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; }
fonte
Você pode usar o atributo [ DisplayFormat ] em seu modelo de visualização, pois deseja aplicar este formato a todo o projeto.
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] public Nullable<System.DateTime> Date { get; set; }
fonte
Depois de algumas pesquisas, acabei definindo
Thread
o valor de CurrentCulture para ter CultureInfo ("en-US") no método de ação do controlador:Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Aqui estão algumas outras opções se você quiser ter essa configuração em todas as visualizações.
Sobre o
CurrentCulture
valor da propriedade:Fonte: MSDN CurrentCulture
Nota: A
CurrentCulture
configuração da propriedade anterior é provavelmente opcional se o controlador já estiver em execução comCultureInfo("en-US")
ou semelhante onde está o formato de data"MM/dd/yyyy"
.Depois de definir a
CurrentCulture
propriedade, adicione o bloco de código para converter a data para o"M/d/yyyy"
formato na visualização:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat
Acima a
@shortDateLocalFormat
variável é formatada comToString("M/d/yyyy")
obras. SeToString("MM/dd/yyyy")
for usado, como eu fiz primeiro, você acaba tendo problema zero . Também funciona como recomendado por TommyToString("d")
. Na verdade,"d"
significa “Padrão de data abreviada” e pode ser usado com diferentes formatos de cultura / idioma também.Eu acho que o bloco de código acima também pode ser substituído por algum método auxiliar legal ou similar.
Por exemplo
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }
pode ser usado com esta chamada de ajuda
@DateFormatter(Model.AuditDate)
Update , descobri que existe uma maneira alternativa de fazer a mesma coisa quando o método DateTime.ToString (String, IFormatProvider) é usado. Quando este método é usado, não há necessidade de usar
Thread
aCurrentCulture
propriedade de. OCultureInfo("en-US")
é passado como segundo argumento -> IFormatProvider para oDateTime.ToString(String, IFormatProvider)
método.Método auxiliar modificado:
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }
.NET Fiddle
fonte
Talvez tente simplesmente
@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)
também você pode usar muitos tipos de formato de string como .ToString ("dd MMM, yyyy") .ToString ("d") etc.
fonte
@model
não reconheceM
ao usar na página HTML, minúsculom
ao declararNo overload for method 'ToString' takes 1 arguments
reclamando quando eu usoToString("mm/dd/yyyy")
Em vista, substitua isto:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Com:
@if(@Model.AuditDate.Value != null){@Model.AuditDate.Value.ToString("dd/MM/yyyy")} else {@Html.DisplayFor(Model => Model.AuditDate)}
Explicação: Se o valor AuditDate não for nulo, ele formatará a data para dd / MM / aaaa, caso contrário, deixe-a como está porque não tem valor.
fonte
Tive um problema semelhante no meu controlador e aqui está o que funcionou para mim:
model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""
"DateSigned" é o valor do meu modelo. A linha lê, se o valor do modelo tiver um valor, formate o valor, caso contrário, não mostre nada.
espero que ajude
fonte
Esta é a melhor maneira de obter uma string de data simples:
@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()
fonte
HtmlString
saídaDisplayFor
, converte em aString
, analisa como aDateTime
e formata isso como aString
. Desnecessariamente complexo, em minha opinião.Você pode usar o Convert
<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>
fonte
Veja esta resposta sobre o
No overload for method 'ToString' takes 1 arguments
erro.Você não pode formatar um DateTime anulável - você deve usar a propriedade DateTime.Value.
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
fonte
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'