viewbag对象传递给javascript

viewbag object pass to javascript

本文关键字:javascript 对象 viewbag      更新时间:2023-09-26

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

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对象文字。)

这是的真实答案

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