我试图通过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 :(得分: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()))