12
votes

Validateur de date personnalisé .NET MVC

Je vais vous attaquer à écrire une classe de validation de la date personnalisée demain pour une application de réunion, je travaille au travail qui validera si une date de début ou de fin donnée est a) moins que la date actuelle, ou b) le début la date est supérieure à la date de fin de la réunion (ou inversement).

Je pense que c'est probablement une exigence assez courante. Quelqu'un peut-il me signaler dans la direction d'un poste de blog qui pourrait m'aider à résoudre ce problème?

J'utilise .NET 3.5 Donc, je ne peux donc pas utiliser le nouveau modèle de validateur API intégré à .NET 4. Le projet que je travaille sur est MVC 2.

mise à jour: la classe que j'écris doit étendre l'espace de noms System.comPonentModel.DataNotations. Dans .NET 4 Il y a une interface ItivalidateObject que vous pouvez implémenter, qui rend ce type de chose absorbée, mais malheureusement, je ne peux pas utiliser .net 4. Comment puis-je faire la même chose dans .NET 3.5? < / p>


1 commentaires

Je viens de travailler dessus. Peut-être que cela aidera: [RECEPTEZVALIDADATOR] [1] [1]: Stackoverflow.com/Questtions/2848684/...


5 Réponses :


0
votes

Je pense que cela devrait le faire:

public boolean MeetingIsValid( DateTime start, DateTime end )
{
      if( start < DateTime.Now || end < DateTime.Now )
          return false;

      return start > end || end < start;
}


1 commentaires

Bonjour merci, après avoir lu votre réponse, j'ai réalisé que j'avais besoin de fournir mes informations. Bien sûr, le code que vous avez fourni validera une date, mais ce n'était pas cette partie du problème que j'étais coincé. J'avais besoin de savoir quelles interfaces à mettre en œuvre pour étendre l'espace de nom de basenotation. Merci quand même.



24
votes
[DateStart]
public DateTime StartDate{ get; set; }

[DateEnd(DateStartProperty="StartDate")]
public DateTime EndDate{ get; set; }

3 commentaires

Dans ce cas, comment puis-je récupérer les valeurs de startDate et enddate du modèle, car ils sont les deux valeurs entrées par l'utilisateur?


Changé ma réponse. :) alors mettez en scène des chèques avec DateTime.Now. Enddate Checks avec StartDate qui est entré par l'utilisateur pour vous assurer que la date de début est après la date de début.


Pourquoi mon dentestetring du contexte actuel est NULL?



4
votes

Je sais que ce message est plus âgé, mais cette solution que j'ai trouvée est bien meilleure.

La solution acceptée dans ce message ne fonctionnera pas si l'objet a un préfixe lorsqu'il fait partie d'une vue de vue. P >

IE Les lignes p> xxx pré>

Une meilleure solution peut être trouvée ici: ASP .NET MVC 3 Validation Utilisation d'un attribut personnalisé de basenotation : p>

Nouveau DategeaterThan Code> Attribut: P>

[Required]
[DataType(DataType.DateTime)]
[Display(Name = "StartDate")]
public DateTime StartDate { get; set; }

[Required]
[DataType(DataType.DateTime)]
[Display(Name = "EndDate")]
[DateGreaterThanAttribute("StartDate")]
public DateTime EndDate { get; set; }


2 commentaires

Certainement une meilleure solution! +1 pour le lien utile!


Voici l'entrée de la machine de navigager. web.archive.org/ Web / 20150204084444 / http: //www.a2zdototnet.com/ ...



-1
votes
public ActionResult Index()
    {
        
        return View("department1");
    }
    public ActionResult Savedata(Vmdepartment vm)
    {

        Hrcontext context = new Hrcontext();
        context.deptentity.Add(vm.dept);
        context.SaveChanges();

        return View("department1", vm);
    }
    public ActionResult Index1(Vmdepartment vm)
    {
        vm.liDepartment = new List<department>();
        
        return View("departmentview",vm);
    }

    public ActionResult search(Vmdepartment vm) {
        var n = vm.dept.name;
        vm.liDepartment = new List<department>();
        Hrcontext context = new Hrcontext();
        vm.liDepartment = context.deptentity.Where(a => a.name == n).ToList();
        return View("departmentview",vm);

    }
}

1 commentaires

Bienvenue dans le débordement de pile. Les décharges de code sans aucune explication sont rarement utiles. Le débordement de la pile concerne l'apprentissage, ne fournissant pas d'extraits de copier aveuglément et de coller. S'il vous plaît Modifier Votre question et expliquez comment cela fonctionne mieux que ce que l'OP fournie. Voir Comment répondre .



-1
votes
public ActionResult Index(vmemployee vme)

    {

        emplyee emp = new emplyee();
        vme.cities = new List<city>();

        vme.countries = new List<country>();

        vme.departments = new List<department>();

        Hrcontext context = new Hrcontext();
        vme.countries = context.cntentity.ToList();
        vme.cities = context.cityentity.ToList();
        vme.departments = context.deptentity.ToList();

        return View("employeelist", vme);
    }

    public ActionResult Index1(vmemployee vm)
    {

        vm.liemp = new List<emplyee>();
        return View("Searchemployee", vm);

    }
    [submit(Name = "sav")]
    public ActionResult save(vmemployee vme)
    {
        vme.cities = new List<city>();
        vme.countries = new List<country>();
        vme.departments = new List<department>();



        Hrcontext context = new Hrcontext();
        vme.countries = context.cntentity.ToList();
        vme.cities = context.cityentity.ToList();
        vme.departments = context.deptentity.ToList();
        vme.emp.Imagefile.SaveAs(@"C:\inetpub\wwwroot\hrsestem\hrsestem\images\" + vme.emp.Imagefile.FileName);
        vme.emp.Imagepath= (@"C:\inetpub\wwwroot\hrsestem\hrsestem\images\" + vme.emp.Imagefile.FileName);

        if (ModelState.IsValid == true)
        {
            context.empentity.Add(vme.emp);
            context.SaveChanges();
        }
        return View("employeelist", vme);
    }

0 commentaires