2016-12-23 1 views
2

J'ai l'option case à cocher qui après que je l'ai cochée, je change la valeur d'un champ de saisie qui affiche uniquement un mois et une année. Dans le cas, la case à cocher n'est pas sélectionnée. L'utilisateur clique sur l'entrée et un outil datepicker donne la possibilité de choisir la date (mois/année). Avec la première option les valeurs ne sont pas affichées correctement, avec le second oui. Qu'est ce que je fais mal?définir une valeur avec jquery, supprime la liaison à ViewModel lorsque les données sont soumises

enter image description here

année Décocher à ce jour et en cliquant sur l'entrée à la place

enter image description here

Maintenant, si je vérifie la (année à ce jour) et afficher la valeur alors fin startDate endDate ont une valeur nulle .

Mon contrôleur est le suivant

[HttpPost, ValidateAntiForgeryToken] 
    public ActionResult Index(ManualRecViewModel vm) 

Mon ViewModel a champ startDate et EndDate

public class ManualRecViewModel 
{ 
     public DateTime? startDate { get; set; } 
     public DateTime? endDate { get; set; } 
} 

et mon avis est

<div class="input-group"> 
     <div> 
      @Html.CheckBox("year-to-date", false) 
      @Html.Label("Year to Date") 
     </div> 

     <div class="dates-filters"> 
      <div> 
       @Html.Label("From:") 
      </div> 
      <div> 
       @Html.TextBoxFor(m => m.startDate, new { @readonly = "readonly" }) 
      </div> 
      <div> 
       @Html.Label("To:") 
      </div> 
      <div> 
       @Html.TextBoxFor(m => m.endDate, new { @readonly = "readonly" }) 
      </div> 
     </div> 
    </div> 

J'ai un js qui définissent les valeurs l'entrée

var date = new Date(); 
    var year = date.getFullYear(); 
    var month = date.getMonth(); 
    $("#startDate").datepicker('setDate', new Date(year, 0, 1)); 
    $("#endDate").datepicker('setDate', new Date(year, month, 1)); 
+0

Avez-vous essayé d'inspecter la les valeurs passées dans votre contrôleur, en utilisant JS? Vous constaterez probablement que les valeurs de date finale ne sont pas valides et qu'un problème de liaison de modèle se produira. – G0dsquad

+0

Je ne poste pas les valeurs avec js, les entrées sont dans un formulaire avec un bouton de soumission – Heinrich

+0

Quelle est votre 'CultureInfo'? – Shyju

Répondre

0

J'ai eu ce problème avant et a constaté que la méthode $.trigger("change") est nécessaire, car l'utilisation de méthodes établies et $.val() ne causent pas réellement les champs d'entrée de la valeur à changer pour la soumission du formulaire

+0

effectivement ma fonction est pour l'événement de changement de la case à cocher $ ("# année-à-date"). Change (yearToDate); mais comment puis-je le faire pour les entrées? – Heinrich

+0

Ce que je veux dire c'est qu'après avoir fait l'appel '$ .setDate()' vous devriez aussi appeler '$ (" # startDate, #endDate "). Trigger (" change ")' pour obtenir les entrées de date pour finaliser le changer – Bwolfing

+0

L'autre option serait dans votre code serveur C#, cochez si l'utilisateur cochez la case YTD, et si elles ont simplement ignorer les dates soumises puis déterminer YTD sur le serveur – Bwolfing