ASP.NET MVC Json.Encode() DateTime problème de codage de chaîne pas de type date
Je vais avoir un problème avec le JavaScript qui est produite par ASP.NET MVC est System.Web.Helpers.Json.Encode()
si le modèle comprend un DateTime
propriété.
Mon Modèle:
public class MyViewModel
{
public string MyString { get; set; }
public DateTime MyDateTime { get; set; }
public int MyInt { get; set; }
public string[] MyStringArray { get; set; }
}
Mon Contrôleur:
public ActionResult Index()
{
var myViewModel = new MyViewModel();
myViewModel.MyString = "My test string";
myViewModel.MyInt = 100;
myViewModel.MyDateTime = DateTime.Now;
myViewModel.MyStringArray = new string[] { "string 1", "string 2" };
return View(myViewModel);
}
Mon Point De Vue:
<script type="text/javascript">
var myViewModel = @Html.Raw(Json.Encode(Model)) ;
</script>
La Sortie:
<script type="text/javascript">
var myViewModel = {"MyString":"My test string","MyDateTime":"\/Date(1372280916431)\/","MyInt":100,"MyStringArray":["string 1","string 2"]} ;
</script>
Le problème avec la façon dont la date est en cours de codage. C'est une chaîne et non un type de Date.
J'ai aussi essayé d'utiliser Newtonsoft.Json.JsonConvert.SerializeObject()
et je reçois toujours une chaîne de caractères et non un type de Date.
OriginalL'auteur Aaron Hoffman | 2013-06-26
Vous devez vous connecter pour publier un commentaire.
Ce comportement est par la conception.
JSON (contrairement à Javascript) n'est pas ont un type date.
replacer
callback pour gérer stringification:JSON.stringify(value[, replacer[, space]])
), vous pouvez intégrer ces membres. JSON.NET capable d'interpréter et de faire revivre des objets avec de fortes types, tant que ces types existent sur le côté serveur. Vous pouvez implémenter votre propre type de schéma de mise en correspondance (j'ai fait des types intermédiaires, les types de modèles, noms de mise en miroir, etc.), construit en JSON.NET. C'est plus facile en AS3 en raison de la forte types, contrairement à JavaScript.Pour incorporer des références, vous pouvez ajouter des objets à un hachage comme ils sont rencontrés. Vous de toujours vérifier le hash pour voir si l'objet a déjà été sérialisé, et si c'est le cas, vous saisissez l'ID de la table de hachage et juste intégrer un
{$ref:id}
dans la chaîne. Encore une fois, c'est plus facile en Flash/AS3, car il prend en charge les références à des objets comme des clés, dans son Dictionnaire de la classe, tandis que le JavaScript ne fonctionne pas. JavaScript convertit toutes les clés pour cordes, ce qui est inutile pour les objets. La seule solution jusqu'à ce que le standard se rattrape avec AS3, est de remplacer l'objet.prototype de donner à chaque objet une chaîne unique ID très tôt.OriginalL'auteur SLaks
Date type n'a pas de littéraux en JavaScript. Vous devrez appeler son constructeur.
OriginalL'auteur Ufuk Hacıoğulları
Vous pouvez utiliser
ou
Les deux ignore la/les Date(' partie, avec "parseInt" vous êtes ignorant la dernière ')/' partie. Ensuite la date de l'obtention de l'objet de millisecondes.
Mais n'oubliez pas que lorsque vous créez Date() de l'objet, il est créé en fonction du Navigateur sur l'heure GMT.
Lors de l'utilisation de cette Date() de l'objet dans mon code javascript, j'ai toujours utiliser UTC Date de méthodes comme:
myDate.getUTCHours();
OriginalL'auteur Oncel Umut TURER
En s'inspirant de ces réponses, j'ai besoin de passer mon nullable date pour un MVC contrôleur et le modèle lié correctement. C'est là que j'ai atterri:
OriginalL'auteur Ken Johnson
À l'aide de la Forloop.HtmlHelpers package nuget vous pouvez obtenir le AddScriptBlock HtmlHelper extension et de faire quelque chose comme ça avec la Newtonsoft appel pour définir une variable dans le script:
}
OriginalL'auteur Bron Davies