2015-04-14 4 views
0

Я застрял на этом в течение часа.Динамическое поле DateTime не работает должным образом

У меня динамичная форма. Который работает нормально при добавлении новых элементов,

Но я пытаюсь представить форму для редактирования я получаю проверки на стороне клиента для DateTime:

enter image description here

Это HTML:

using (Html.BeginCollectionItem("ValidDates")) 
{ 
    <div class="row mt-10"> 
     @Html.HiddenFor(m => m.Id) 
     @Html.HiddenFor(m => m.IsDeleted, new { data_is_deleted = "false" }) 
     <div class="col-md-5"> 
      @Html.TextBoxFor(m => m.ValidFrom, new { @Value = Model.ValidFrom.ToString("dd/MM/yyyy"), @class = "form-control dateTimePicker" }) 
      @Html.ValidationMessageFor(m => m.ValidFrom) 
     </div> 
     <div class="col-md-5"> 
      @Html.TextBoxFor(m => m.ValidTo, new { @Value = Model.ValidFrom.ToString("dd/MM/yyyy"), @class = "form-control dateTimePicker" }) 
      @Html.ValidationMessageFor(m => m.ValidTo) 
     </div> 
     <div class="col-md-1"> 
      @Html.CheckBoxFor(m => m.Enabled) 
     </div> 
     <div class="col-md-1"> 
      <span class="glyphicon glyphicon-trash" data-action="removeItem" title="remove" style="cursor:pointer"></span> 
     </div> 
    </div> 
} 

И это Модель:

public class BucketValidDates : BaseEntity 
{ 
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
    public DateTime ValidFrom { get; set; } 

    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
    public DateTime ValidTo { get; set; } 

    public bool Enabled { get; set; } 

    public virtual Bucket Bucket { get; set; } 

    [NotMapped] 
    public bool IsDeleted { get; set; } 
} 

У меня даже tr с использованием EditorFor (Это работает, когда я отправляю обратно, но DateFormat не подходит).

using (Html.BeginCollectionItem("ValidDates")) 
{ 
    <div class="row mt-10"> 
     @Html.HiddenFor(m => m.Id) 
     @Html.HiddenFor(m => m.IsDeleted, new { data_is_deleted = "false" }) 
     <div class="col-md-5"> 
      @Html.EditorFor(m => m.ValidFrom, new { @class = "form-control" }) 
      @Html.ValidationMessageFor(m => m.ValidFrom) 
     </div> 
     <div class="col-md-5"> 
      @Html.EditorFor(m => m.ValidTo, new { @class = "form-control" }) 
      @Html.ValidationMessageFor(m => m.ValidTo) 
     </div> 
     <div class="col-md-1"> 
      @Html.CheckBoxFor(m => m.Enabled) 
     </div> 
     <div class="col-md-1"> 
      <span class="glyphicon glyphicon-trash" data-action="removeItem" title="remove" style="cursor:pointer"></span> 
     </div> 
    </div> 
} 

Я попытался изменить формат в модели для {0: дд/мм/гггг}

Мне нужен формат быть: day/Month/Year Но как вы можете видеть на картинке ниже, что формат является Year/Month/day

enter image description here

DatePicker для этого проекта является: http://eonasdan.github.io/bootstrap-datetimepicker/

С этим связано это событие?

+0

Вы, конечно, должны иметь DisplayFormat набор для dd-MM-yyyy (если нет другой причины, почему он установлен таким образом.) –

+0

@NathanKoop I h ave попытался установить его на dd-MM-yyyy, но я все равно получаю тот же формат в представлении –

+0

. Проверьте этот пост http://stackoverflow.com/questions/18546971/mvc-4-how-to-validate-a-non- us-date-with-client-validation – ssimeonov

ответ

0

Я нашел решение, которое, кажется, работает в настоящее время:

public class BucketValidDates : BaseEntity 
    { 
     public DateTime ValidFrom { get; set; } 

     public DateTime ValidTo { get; set; } 

     public bool Enabled { get; set; } 

     public virtual Bucket Bucket { get; set; } 

     [NotMapped] 
     public bool IsDeleted { get; set; } 
    } 

HTML:

using (Html.BeginCollectionItem("ValidDates")) 
{ 
    <div class="row mt-10"> 
     @Html.HiddenFor(m => m.Id) 
     @Html.HiddenFor(m => m.IsDeleted, new { data_is_deleted = "false" }) 
     <div class="col-md-5"> 
      @Html.TextBoxFor(m => m.ValidFrom, new { @class = "form-control dateTimePicker", type = "text", data_val = "false" }) 
      @Html.ValidationMessageFor(m => m.ValidFrom) 
     </div> 
     <div class="col-md-5"> 
      @Html.TextBoxFor(m => m.ValidTo, new { @class = "form-control dateTimePicker", type = "text", data_val = "false" }) 
      @Html.ValidationMessageFor(m => m.ValidTo) 
     </div> 
     <div class="col-md-1"> 
      @Html.CheckBoxFor(m => m.Enabled) 
     </div> 
     <div class="col-md-1"> 
      <span class="glyphicon glyphicon-trash" data-action="removeItem" title="remove" style="cursor:pointer"></span> 
     </div> 
    </div> 
} 

JQuery для активации DateTimePicker:

<script type="text/javascript"> 

    $(function() { 
     $('.dateTimePicker').datetimepicker({ 
      format: 'DD/MM/YYYY' 
     }); 
    }); 

</script> 
+1

Это не будет работать во всех случаях. Если культура клиента использует другой формат даты, проверка jQuery снова вернет ошибку. В вашем случае это работает, потому что культура на вашем компьютере использует тот же формат даты. – ssimeonov

Смежные вопросы