EditorFor (дата): как отобразить пустое текстовое поле? - PullRequest
6 голосов
/ 29 ноября 2010
<%: Html.EditorFor(model => model.date)%>

Как заставить этот код отображать пустое текстовое поле при загрузке?Model.date не обнуляется, поэтому всегда отображает непустое значение.Как заставить его начинаться с пустого значения?

Примечание: я не хочу делать его обнуляемым, потому что в реальном коде он привязан к свойству модели, которое должно иметь значениеиметь Required аннотацию данных для этого свойства).Не имеет смысла делать это обнуляемым.Замена его датой по умолчанию, такой как сегодня, также не подходит, потому что в данном случае важно убедиться, что пользователь не забыл активно указать дату.1009 *

Ответы [ 5 ]

8 голосов
/ 29 ноября 2010

Проблема в том, что если свойство Model.Date не имеет значения NULL, оно всегда будет иметь значение.В прошлом я создавал шаблон редактора для DateTime (в котором также используется средство выбора даты jquery).Это позволяет вам обрабатывать пустое значение, для которого вы, вероятно, будете искать дату, равную DateTime.MinValue.

Таким образом, шаблон вашего редактора будет выглядеть примерно так:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
<%=Html.TextBox("", (Model != DateTime.MinValue ? Model : string.Empty)) %>

Youне нужно беспокоиться о пустой строке для имени, поскольку на самом деле она заполняется только префиксом html, которого должно быть достаточно.

В этой статье также описывается, как создать шаблон редактора.

http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx

Лично я хотел бы, чтобы DateTime в моей модели представления обнулялся, но не в моей модели домена, используя проверку между

2 голосов
/ 20 ноября 2015
  1. В вашей модели создайте одноуровневое свойство и украсьте его следующим образом:

    [Required]
    DateTime? CustomDate {
       get { return date==default(DateTime)?null:date; }
       set { date = value; }
    }
    
  2. На ваш взгляд замените введенные значения на:

    <%:Html.EditorFor(model => model.CustomDate)%>
    
0 голосов
/ 20 мая 2017

Некоторые исправления в ответе Хорхе:

public DateTime DOB { get; set; } 
[Required]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime? NullableDOB
{
  get => DOB.ToNullable();
  set => DOB = value.DefaultIfNull(); 
}

ToNullible(), DefaultIfNull() и IsNull() - это удобные функции расширения:

public static T? ToNullable<T>(this T source) where T : struct
  => source.IsNull(default(T)) ? (T?)null : source;

public static T? ToNullable<T>(this T source, T @default) where T : struct
  => source.IsNull(@default) ? (T?)null : source;

public static T DefaultIfNull<T>(this T? source, T @default) where T : struct
  => source ?? @default;

public static T DefaultIfNull<T>(this T? source) where T : struct
  => DefaultIfNull(source, default(T));


public static bool IsNull<T>(this T source) where T : struct
  => source.Equals(default(T));
0 голосов
/ 04 февраля 2014

Вы можете использовать небольшую функцию jquery.

Я решаю свою проблему следующим образом:

        @if(Model.HolidayDate <= DateTime.MinValue)
        {
            @Html.TextBoxFor(model => model.HolidayDate, new { @class = "datepick", @style = "width: 75px;", @id="dataInput"})
        }
        else
        {
            @Html.TextBoxFor(model => model.HolidayDate, new { @class = "datepick", @style = "width: 75px;"})
        }

и в конце страницы:

$ (function () {$ ('# dataInput'). Val ('');});
0 голосов
/ 29 ноября 2010

Я бы поместил это в <td> или <div>, а затем использовал бы свойство id для доступа и очистки его через jquery.

<script type="text/javascript">
$(document).ready(function(){
$("#clearme").html("");
});
</script>

<div id="clearme">
<%: Html.EditorFor(model => model.date)%>
</div>

Возможно, есть способ использовать встроенную функцию MVC, но я не знаю ни одной.

Здесь - это быстрая скрипка, которая показывает вамконцепция, так что вы можете поиграть с ней, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...