2016-03-08 53 views
-1
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; 
} 

我有上面的示例函數,我用來遍歷html錶行並將行值存儲在數組中。遍歷數組項和檢查屬性值

一旦我有我的數組填充,我使用下面的代碼段將數據發佈到我的控制器。

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; 
     } 
    }); 
}); 

}

我現在想在我POSTDATA功能做的是檢查,如果我的「視圖模型」對象包含任何項目(行),其中「GrandTotal」 0

+0

支票0,然後?? –

+0

@Reddy並返回false – StackTrace

+0

好的,你可以發佈你的'viewmodel'數據是什麼?我看到它的一個對象, –

回答

1

使用JSON.parse(viewmodel),有012準備ReportViewModel類型的對象ItemDetailsViewModel類型和疊代的JS數組以查找是否存在grandtotal == 0 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

正如你已字符串化了,現在你必須分析它回來,如果你要訪問它的鍵和值:

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; 
     } 
    }); 
    }); 
} 
0

有再次無點迭代陣列。打破GetViewModelData()中的循環並從該函數返回false。然後,在POSTDATA

內部測試它現有的for循環:

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

然後在POSTDATA()

var PostData = function() { 
$(".btnSubmit").click(function() { 
    var viewmodel = GetViewModelData(); 
    if(viewmodel === false){ 
     alert('Missing total'); 
     return; //don't proceed 
    } 
    /* your ajax */ 
+0

如果他現有的功能在其他地方使用,該怎麼辦?這可能不需要此更改 –

+0

@Reddy OP可以確定。 – charlietfl

+0

在某些地方,它的強制性,GrandTotal不能爲0,而在其他地方它的可選(只顯示警告)。在其他一些地方,0被認爲是有效值。 – StackTrace