У меня проблемы с обучением C# и mvc4.C# MVC 4 ViewModel не принимает значение null DateTime
Проблема возникает в части фильтра моего приложения. У меня есть ViewModel, который захватывает список «Listar_Produtos» базы данных и некоторые поля для поиска параметров.
Что я намерен сделать, так это сделать фильтр приемлемым для любого поля, даже если это нулевые значения. Потому что я сделаю фильтр на основе этих параметров.
У меня есть ViewModel:
using Foolproof;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Ecommerce.Models.Repository
{
public class Produto_Repository
{
public class Index_Listar_Produtos
{
public List<Listar_Produto> Index_List_Produto { get; set; }
[Display(Name = "Data de Cadastro Inicial")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public Nullable<DateTime> CadastroInicialData { get; set; }
[Display(Name = "Data de Cadastro Final")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
[GreaterThanOrEqualTo("CadastroInicialData", ErrorMessage = "\"Data Inicial\", deve ser maior que \"Data Final\"")]
public Nullable<DateTime> CadastroFinalData { get; set; }
}
}
}
И у меня есть следующий вид:
<td>
@Html.LabelFor(Model => Model.CadastroInicialData)<br />
@Html.TextBoxFor(Model => Model.CadastroInicialData, "{0:dd/MM/yyyy}")
@Html.ValidationMessageFor(Model => Model.CadastroInicialData)
</td>
<td>
@Html.LabelFor(Model => Model.CadastroFinalData)<br />
@Html.TextBoxFor(Model => Model.CadastroFinalData, "{0:dd/MM/yyyy}")
@Html.ValidationMessageFor(Model => Model.CadastroFinalData)
</td>
В моем контроллере у меня есть:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Filtro(Produto_Repository.Index_Listar_Produtos ViewModel)
{
if (!ModelState.IsValid)
{
Produto_Repository.Index_Listar_Produtos Model_list = Produto_Repository.GetProdutoByAll();
ViewModel.Index_List_Produto = Model_list.Index_List_Produto;
return View("Index", ViewModel);
}
}
Где «Produto_Repository.GetProdutoByAll() ;» снова возвращает список «Produtos».
Код работает отлично и хорошо, если я даю даты в форме. Даты указаны в формате «pt-BR»: 23/03/2013.
Но если я не предоставляю ничего в полях (оба поля даты в моем представлении), чем «if (! ModelState.IsValid)» возвращает true и вводит «if», потому что появляются как «CadastroInicialData», так и «CadastroFinalData» с нулевыми значениями
Желаемое поведение заключается в том, что ViewModel может принимать нулевые или пустые значения, предоставленные «Nullable» или «DateTime?».
I судимого для вставки значений в обнуляемое полей даты, выполнив следующие действия:
if (ViewModel.CadastroInicialData == null)
ViewModel.CadastroInicialData = Convert.ToDateTime("01/01/2013");
if (ViewModel.CadastroFinalData == null)
ViewModel.CadastroFinalData = Convert.ToDateTime("01/01/2013");
Но теперь ViewModel возвращает следующее сообщение об ошибке: «неверный формат дата»
Одно замечания, что Я использую следующее «решение» для преобразования данных для pt-BR dateformat по следующему вопросу: Format datetime in asp.net mvc 4
Как я могу заставить ViewModel принимать значения null whe n текстовые поля не заполняются датами? Я немного смущен. Я приветствую любую помощь! Благодаря !
Это аннотации данных, пожалуйста, взгляните на мой ответ, чтобы понять, почему. – Tommy
hi @Tommy, помощник аннотаций данных - это «GreaterThanOrEqualTo», а не «GreaterThan». Если время datetime равно нулю, проверка будет успешной. – Lin
... вы на 100%? Какова ошибка при проверке состояния модели? – Tommy