2014-10-09 86 views
0

余米试图传递一个对象来查看与viewbag并将其传递给JavaScript参数视图 但是,当涉及到分配对象,它看起来像字符串脚本值喜欢它的命名空间viewbag对象传递给JavaScript

在控制器:

public ACCIDENT_REPORTS getFilledReportWithEntitiesById(int accidentReport_id) 
     { 
      ACCIDENT_REPORTS report = new ACCIDENT_REPORTS(); 
      report = context.ACCIDENT_REPORTS.Include("ACCR_ENTITIES").Where(a => a.ID == accidentReport_id).FirstOrDefault(); 
      return report; 
     } 

    ViewBag.Report = DatabaseContext.Current.AccidentReportingRepository.getFilledReportWithEntitiesById(id); //its okey, all data in viewbag 
鉴于

<script> 
    debugger 
    var data = '@ViewBag.Report'; 
</script> 
// in debugger value looks like; var data = 'Application.Database.ACCIDENT_REPORTS; 

为什么它看起来像字符串?我怎么能传递viewbag的内容对JavaScript值

这里是我的实体对象的返回类型:

public partial class ACCIDENT_REPORTS 
    { 
     public ACCIDENT_REPORTS() 
     { 
      this.ACCR_ENTITIES = new HashSet<ACCR_ENTITIES>(); 
     } 

     public decimal ID { get; set; } 
     public decimal FACILITY_ID { get; set; } 
     public Nullable<System.DateTime> START_DATE { get; set; } 
     public Nullable<System.DateTime> END_DATE { get; set; } 
     public string TITLE { get; set; } 
     public Nullable<decimal> ACCIDENT_TYPE { get; set; } 
     public Nullable<decimal> REPORTED_UNDER { get; set; } 
     public Nullable<decimal> SEVESOII_STATUS { get; set; } 
     public Nullable<decimal> INDUSTRIAL_ACTIVITY { get; set; } 
     public string REASON_FOR_REPORTING { get; set; } 
     public string ACCIDENT_DESCRIPTION { get; set; } 
     public string SITE_DESCRIPTION { get; set; } 
     public string UNIT_DESCRIPTION { get; set; } 
     public string CAUSES_OF_ACCIDENT { get; set; } 
     public string CONSEQUENCES { get; set; } 
     public string EMERGENCY_RESPONSE { get; set; } 
     public string LESSONS_LEARNED { get; set; } 
     public string ACCIDENTS_INVOLVING { get; set; } 
     public Nullable<decimal> REPORT_STATUS { get; set; } 

     public virtual ICollection<ACCR_ENTITIES> ACCR_ENTITIES { get; set; } 
    } 
} 

回答

0

是什么类型通过getFilledReportWithEntitiesById()返回

想必这是Application.Database.ACCIDENT。所有的视图引擎都会调用.ToString()。而任何引用类型(基本上都是object的任何子类)的.ToString()的默认实现是返回类型名称。

如果您想要自定义字符串表示形式,那么该类型需要覆盖.ToString()。例如:

public override string ToString() 
{ 
    return string.Format("{0} - {1}", ID, Name); 
} 

如果对象具有ID属性和属性Name然后它的字符串表示随后将是一个连字符(在之间用空格)中分离的那些值。但是你想要在这个方法中完成你的对象的字符串表示。

反过来说,如果你不希望它是一个,但希望JavaScript代码来使用它作为一个对象,那么你想它序列化到JSON。事情是这样的:

var data = @Json.Encode(ViewBag.Report); 

(您可能需要调整的是一点点,我也没有派上用场,以测试它的环境,但你的想法...要使用它作为在JavaScript对象。代码它需要被序列化到一个JavaScript对象文字。)

+0

它返回一个enttiy对象。我也试图序列化,但在JSON里面它也看起来名字空间字符串:S – user3347326 2014-10-09 13:40:28

+0

@ user3347326:“一个实体对象”并没有真正告诉我任何东西。它似乎是一种自定义类型(尽管不遵循C#命名约定,但这不是什么大问题)。你是如何尝试将其序列化为JSON的,结果如何?被序列化的对象的结构是什么? – David 2014-10-09 13:42:59

+0

var data = JSON.parse('@ Html.Raw(ViewBag.Report)');这种方式,我总是使用和工作良好的解析方法,但现在的内容原始看起来像'Application.Database.ACCIDENT_REPORTS'值看起来命名空间字符串我认为它与你说有关C#namin我怎么能解决这个问题? (我编辑了这个问题) – user3347326 2014-10-09 13:57:17

-1

这才是真正的答案

@Html.Raw(Json.Encode(Model.PlaceStatistic.ToArray())) 
相关问题