Почему формат даты в ASP Net MVC отличается при использовании внутри HTML-помощника?

StackOverflow https://stackoverflow.com/questions/3067287

  •  28-09-2019
  •  | 
  •  

Вопрос

Я только что наткнулся на очень интересный вопрос. Если я использую ViewData, чтобы пройти значение TATETIME к представлению, а затем отображать его внутри текстового полета, даже если я использую String.Format точно так же, я получаю разные результаты форматирования при использовании HTML.TextBox Helper.

<%= Html.TextBox("datefilter", String.Format("{0:d}", ViewData["datefilter"]))%>
<input id="test" name="test" type="text" value="<%: String.Format("{0:d}", ViewData["datefilter"]) %>" />

Приведенный выше код отображается следующим HTML:

<input id="datefilter" name="datefilter" type="text" value="2010-06-18" />
<input id="test" name="test" type="text" value="18/06/2010" />

Обратите внимание, как линия кулаки, которая использует HTML-хелпер, производит формат даты одним способом, в то время как второй выводится очень разный выход. Любые идеи почему?

Примечание. Я в настоящее время в Бразилии, поэтому стандартный формат короткого дата вот DD / MM / Yyyy.

Это было полезно?

Решение

Причина, по которой это происходит, потому что помощник TextBox использует значение, хранящееся внутри ViewData["datefilter"] потому что его имя datefilter и полностью игнорирует второй аргумент, который вы передаете, который должен отформатировать дату. Попробуйте изменить имя текстового поля.

Лучшее решение - использовать шаблоны редактора и сильно набранные мнения вместо ViewData. Отказ Вот пример.

Модель:

public class MyModel
{
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", 
                   ApplyFormatInEditMode = true)]
    public DateTime Date { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyModel
        {
            Date = DateTime.Now
        };
        return View(model);
    }
}

Вид:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SomeNs.Models.MyModel>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%: Html.EditorFor(x => x.Date) %>
</asp:Content>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top