viewbag对象传递给javascript

时间:2014-10-09 13:27:36

标签: javascript asp.net-mvc viewbag

我试图通过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; }
    }
}

2 个答案:

答案 0 :(得分:0)

getFilledReportWithEntitiesById()返回的类型是什么?

据推测,这是一个Application.Database.ACCIDENT。所有视图引擎都会根据它给出的内容调用.ToString()。并且.ToString()对任何引用类型(基本上是object的任何子级)的默认实现是返回类型名称。

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

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

如果对象具有ID属性和Name属性,则其字符串表示将是由连字符分隔的值(中间有空格)。但是,您希望构造对象的字符串表示形式,将在此方法中完成。

相反,如果您不希望它是字符串,但希望JavaScript代码将其用作对象,那么您希望将其序列化为JSON。像这样:

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

(你可能需要稍微调整一下,我没有一个方便的环境来测试它。但是你明白了......要把它用作JavaScript代码中的一个对象,它需要被序列化为一个JavaScript对象文字。)

答案 1 :(得分:-1)

这是真正的答案

@Html.Raw(Json.Encode(Model.PlaceStatistic.ToArray()))