2010-04-09 3 views
1

Commençons à travailler avec .NET et MVC (1). J'ai un problème où, dans mon action d'ajout, la date entrée pour une raison quelconque se termine par 1/1/0001 au lieu de ce qui est entré, causant ainsi un débordement de date.ASP.NET MVC Date de création du champ en tant que 1/1/0001

Dans mon modèle, ce champ ("Ajouté") est de type datetime et n'autorise pas les valeurs nulles.

Dans mon contrôleur je:

public ActionResult Add() 
    { 
     Instance instance = new Instance() 
     { 
      Added = DateTime.Now, 
      Active = true 
     }; 

     return View(instance); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Add(Instance instance) 
    { 

     if (ModelState.IsValid) 
     { 
      try 
      { 
       System.Diagnostics.Trace.Write("test"); 
       instanceRepository.Add(instance); 
       instanceRepository.Save(); 

       return RedirectToAction("Details", new { id = instance.InstanceID }); 
      } 
      catch 
      { 
       ModelState.AddRuleViolations(instance.GetRuleViolations()); 
      } 
     } 
     return View(instance); 
    } 

Et à mon avis je:

 <div class="editor-label"> 
      <%= Html.LabelFor(model => model.Added) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.TextBoxFor(model => model.Added,String.Format("{0:g}",Model.Added))%> 
      <%= Html.ValidationMessageFor(model => model.Added) %> 

Quand j'aller aux instances/Ajouter la valeur par défaut est correctement réglée, mais dès que Je soumets la date se transforme en 1/1/0001 (d'après ce que j'ai compris, cela indique qu'il était soit null ou dans un format non reconnaissable)

Lorsque je débogue et palce une montre sur Request.Form je vois La date d'arrivée est encodée ie Request.Form {Added = 4% 2f9% 2f2010 + 8% 3a24% 3a39 + AM} - est-ce un problème? Je ne connais probablement pas assez d'informations pour déterminer de manière concluante pourquoi cela échoue, mais si quelqu'un pouvait fournir de bonnes astuces de débogage sur la façon de déterminer où la date soumise est utilisée, je l'apprécierais vraiment.

+0

Html.TextBoxFor ne peut pas être dans MVC 1 que vous avez écrit – Gregoire

+0

Ugh - Je dois être en utilisant MVC 2 - avait à la fois installé et pensé que j'étais en utilisant 1 mais cela va juste montrer comment je suis nouveau à ce ... – engil

+0

Vous avez raison - les propriétés de System.Web.MVC montrent la version 2.0 - merci pour la tête Gregoire – engil

Répondre

0

Merci pour toutes les réponses ... L'erreur se sont avérées être dans ma classe de modèle partiel:

namespace MSSQL_Manager.Models 
{ 
[Bind(Include="xxxxxx,xxxxx,xxxx,xxxx")] 
public partial class Instance 
{ 
    public bool IsValid 
    { 
     get { return (GetRuleViolations().Count() == 0); } 
    } 

je n'avais pas le champ « Ajouté » dans le [Attribut Bind (Include = "xxxx")].

besoin de lire plus sur les attributs - Merci à tous pour leur temps

1

Le problème est que le bit String.Format("{0:g}", Model.ExpirationDate) ci-dessus est le paramètre TemplateName de la méthode TextBoxFor. Le moteur de vue ne sera pas en mesure de trouver un modèle qui correspond à la date.

Ce que vous devez faire est de décorer votre modèle

// inside your Instance model 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:g}")] 
[DisplayName("Added")] 
public DateTime Added { get; set; } 

puis utilisez ce qui suit dans votre vue

<%= Html.EditorFor(model => model.DateRequired)%> 

et je me suis cette solution de here.

+0

Merci Nick - Je vais vérifier ce lien – engil

0

On dirait que c'est un problème de localisation IMO.

Voir cette post

Questions connexes