L'exécution de Javascript MVC code en Cas de déclaration incorrecte

Je suis un peu perplexe avec le code suivant. Il a bien fonctionné dans VS2010 sur Windows 7, et maintenant que j'ai mis à jour le matériel de Windows 8 et visual studio 2012, il ne fonctionne pas.

J'ai le code JavaScript suivant dans mon application MVC:

<script language="javascript" type="text/javascript">
var today;

if("@Model.Birthday.HasValue"){
    var today = new Date("@Model.Birthday.Value.Year", "@Model.Birthday.Value.Month" - 1, "@Model.Birthday.Value.Day");
}else{
    today = new Date();
}

Le Modèle est en tirant à partir d'un ViewModel qui a une propriété qui ressemble à ceci:

    public System.DateTime? Birthday
    {
        get { return user.Birthday; }
        set { user.Birthday = value; }
    }

L'exception est levée dans la ligne:

var today = new Date("@Model.Birthday.Value.Year", "@Model.Birthday.Value.Month" - 1, "@Model.Birthday.Value.Day");

Il revient avec "Nullable objet doit avoir la valeur", il devrait, si il saute dans la ligne pour l'exécuter. Mais, si la déclaration est de retour faux. Si je supprime la ligne et il vous suffit de mettre une alerte déclaration, il ne s'exécute jamais que la ligne ou l'alerte, parce que l'Anniversaire de la propriété est null. Quelque chose semble avoir changé dans la façon dont JS s'exécute MVC code, et il semble pour évaluer l'ensemble du bloc de code, indépendamment de l'instruction if. J'ai aussi essayé le suivant, mais en vain:

  • Testé dans Chrome pour W8
  • Testé dans un bloc try /catch. Fait intéressant, il n'a pas d'attraper l'exception (je suppose que JS ne sera pas attraper .NET exceptions)
  • Testé, en indiquant expressément @Modèle.D'anniversaire.HasValue == true
  • Testé par @Modèle.D'anniversaire.La valeur != null
  • Testé en mode Release sur le Mode de Débogage

Cela devrait être simple test pour voir si une valeur est nulle, et si c'est pas le cas, créez un JS objet Date de l' .NETS de la propriété, si elle est, de créer un nouveau JS Date objet, mais pour une raison quelconque, il veut évaluer et d'exécuter cette ligne, même si HasValue est faux.

Vraiment perplexe. Quelqu'un a vu quelque chose comme ça?

Vous avez mis à niveau le logiciel, pas matériel. (Sauf si vous avez changé de machines.)
eh bien, techniquement, dans la mise à niveau du logiciel, j'ai eu une nouvelle machine de dev, j'ai donc fait la mise à niveau le matériel et le logiciel. Peu importe, il a travaillé dans VS2010 sur IE 9 sans problème, maintenant, il échoue.

OriginalL'auteur Tyler Davey | 2012-11-04