2014-01-21 69 views
1

我有一個麻煩這樣做:我有一個包含文件編號的列表,響應時間爲每一個ViewBag,這樣創建:ViewBag在Javascript代碼MVC 4

控制器

根據用戶在下拉列表中選擇的文檔,javascript代碼計算處理文檔的真實持續時間(持續時間)。

DocumentId(int)   Response(int) 
    1      2 days 
    2      3 days 
    3      1 day 

完整的JavaScript代碼計算基於沒有周末和節假日響應時間的最後期限,但它不工作的唯一部分是JavaScript代碼以下部分:

的JavaScript在視圖:

function CalculateTime(documenttype) { 
       var duration= 0; 
       var jScriptArray= new Array(); 
       var array = '@Html.Raw(Json.Encode(ViewBag.Documents))'; 
       for (var i = 0; i < array.length; i++) { 
        for (var j = 0; j < 2; j++) { 
         jScriptArray [i][j] = array [i][j]; 
        } 
       } 
       for (i = 0; i < jScriptArray.length; i++) { 
        if (documenttype== jScriptArray [i][0]) duration= jScriptArray [i][1]; 
       } 
       return duration; 
      } 

我已經有基於一個下拉列表正確documenttype變量,但這個腳本是行不通的。我認爲是我想要使用ViewBag的方式,但我不確定。我需要知道的是:我的代碼出現了什麼問題,或者是以另一種方式執行此操作。

在此先感謝

+0

你應該把它編碼成JSON你把它發送到ViewBag之前。 – user1477388

+0

這是因爲通過在JSON周圍使用引號將JavaScript變量'array'設置爲字符串值。 – Xenolightning

回答

0

我的一個朋友幫我解決我的問題。有些人告訴我使用JSON,所以我們這樣做:

控制器:

using System.Web.Script.Serialization; 
using Newtonsoft.Json; 

... 

var timeList= db.DocumentType.ToList(); 

ViewBag.ResponseTimes= new JavaScriptSerializer().Serialize(
       JsonConvert.SerializeObject(new 
       { 
        times= (from obj in timeList 
           select new { DocumentTypeId= obj.DocumentTypeId, ResponseTime= obj.ResponseTime}) 
       }, Formatting.None)); 

JavaScritp在查看:

function CalculateTime(documenttype) { 
       var duration = 0; 
       var jScriptArray = new Array(); 
       var array = $.parseJSON(@Html.Raw(ViewBag.ResponseTimes)); 
      for (i = 0; i < array.times.length; i++) { 
       if (parseInt(documenttype) == array.times[i].DocumentTypeId) { 
        duration= array.times[i].ResponseTimes; 
       } 
      } 
      return duration; 
     } 

謝謝!

PS:我不知道這兩個答案的給驗收的事業,我們同時使用的一部分....

0

只需刪除引號('),你必須Newtonsoft.Json這一點。

var array = @Newtonsoft.Json.JsonConvert.SerializeObject(ViewBag.Documents); 

這將工作。

+0

即使在「;」中有語法錯誤在上面的代碼中,這將很好地工作。 – vengi83644

+0

如果我刪除引號顯示數組爲空。如果我使用帶有該語句的引號,則可以在Web Developer控制檯顯示TypeError:「jScriptArray [i]未定義」。 –

+0

您需要在您的項目中添加Newtonsoft.Json.dll以運行該語句。 – vengi83644

3

只是刪除引號

var array = @Html.Raw(Json.Encode(ViewBag.Documents)); 
+0

TypeError:數組在Web Developer控制檯處爲null –

+0

@ASP_beginner,調試您的應用程序並查看「ViewBag.Documents」中放置了什麼控制器操作,然後執行'console.log(@ Html.Raw(Json.Encode(ViewBag。文檔)))' – Satpal

+0

'array' still null .. –