function GetViewModelData() {
    var RDcViewModel = [];
    var recordId = $.trim($("#recordId").val());

    for (i = 1; i <= rowCount; i++) {
        var item1 = $.trim($("#item1" + i).val()) == '' ? 0 : parseInt($("#item1" + i).val());
        var item2 = $.trim($("#item2" + i).val()) == '' ? 0 : parseInt($("#item2" + i).val());
        var GrandTotal = (item1 + item2);
        var rdtCViewModel = new ItemDetailsViewModel(0, item1, item2, GrandTotal);
        RDcViewModel.push(rdtCViewModel);
    }

    var obj = new ReportViewModel(recordId, RDcViewModel);
    var viewmodel = JSON.stringify(obj);
    return viewmodel;
}

J'ai l'exemple de fonction ci-dessus que j'utilise pour parcourir les lignes de table html et stocker les valeurs de ligne dans un tableau.

Une fois que mon tableau est rempli, j'utilise l'extrait de code ci-dessous pour publier les données sur mon contrôleur.

var PostData = function () {
$(".btnSubmit").click(function () {
    var viewmodel = GetViewModelData();
    //i want to check from here if viewmodel has any item(row) where GrandTotal is 0 (zero)
    $.ajax({
        async: true,
        cache: false,
        contentType: 'application/json; charset=utf-8',
        data: viewmodel,
        headers: GetRequestVerificationToken(),
        type: 'POST',
        url: '/' + virtualDirectory + '/Item/DataSave',
        success: function (data) {
            if (data == true) {
                window.location.href = '/' + virtualDirectory + '/Destination/Index';
            }
        },
        error: function (e) {
            return false;
        }
    });
});

}

Ce que je veux maintenant faire dans ma fonction PostData est de vérifier si mon objet "viewmodel" contient un élément (ligne) où "GrandTotal" est 0.

-1
StackTrace 8 mars 2016 à 15:24

3 réponses

Meilleure réponse

À l'aide de JSON.parse(viewmodel), préparez l'objet de type ReportViewModel avec RDcViewModel tableau JS de type ItemDetailsViewModel et parcourez-le pour trouver si un grandtotal == 0 pour les instances ItemDetailsViewModel

  var viewmodel = GetViewModelData(),
  var obj = JSON.parse(viewmodel);
  var bFoundZero=false;
  $.each(obj.RDcViewModelArray, function(idx, elem){
     if( elem.GrandTotal === 0 ) bFoundZero=true;
  })
  if( bFoundZero ) return 0;
1
Rajshekar Reddy 8 mars 2016 à 12:55

Comme vous l'avez stratifié, vous devez maintenant le ré-analyser si vous voulez accéder à ses clés et valeurs:

var PostData = function() {
  $(".btnSubmit").click(function() {
    var viewmodel = GetViewModelData(),
        viewObj = JSON.parse(viewmodel),
        flag = false; // <-----parse it back here

    viewObj.forEach(function(i, el){
        flag = el.GrandTotal === 0;
        return flag;
    });

    if(flag){ return false; }  // <------ and stop it here.


    $.ajax({
      async: true,
      cache: false,
      contentType: 'application/json; charset=utf-8',
      data: viewmodel,
      headers: GetRequestVerificationToken(),
      type: 'POST',
      url: '/' + virtualDirectory + '/Item/DataSave',
      success: function(data) {
        if (data == true) {
          window.location.href = '/' + virtualDirectory + '/Destination/Index';
        }
      },
      error: function(e) {
        return false;
      }
    });
  });
}
1
Jai 8 mars 2016 à 12:43

Il n'y a plus de point d'itérer le tableau. Brisez la boucle dans GetViewModelData() et retournez false à partir de cette fonction. Ensuite, testez-le dans PostData

Intérieur existant pour boucle:

var GrandTotal = (item1 + item2);
if(!GrandTotal){
   return false; 
}

Puis dans PostData ()

var PostData = function () {
$(".btnSubmit").click(function () {
    var viewmodel = GetViewModelData();
    if(viewmodel === false){
      alert('Missing total');
      return; //don't proceed
     }
     /* your ajax */
0
charlietfl 8 mars 2016 à 12:51