2014-01-21 68 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 .. –