早上好,全部,
我的视图中有一个javascript变量。我一直这样做......
var skinData = null;
然后在document.ready ....
$.ajax({
type: 'POST',
url: 'theme/getskins',
data: {},
contentType: 'application/json; charset=utf-8',
success: function(data){
skinData = data;
}
});
我的问题是为什么我在加载视图后执行此操作。我正试图在_ViewStart.cshtml中执行此操作
viewPage.ViewBag.SkinInfo = new JsonResult { Data = SkinManager.GetSkins() };
如何获取此值并将其值输出到我的javascript变量。当我真的想在第一次旅行时将其推送到客户端时,我认为我不需要再做另一个请求。任何提示或建议当然值得赞赏。我该怎么做才能正确?我尝试了一些这方面的变化,但显然是行不通的。好像......
var skinData = @ViewBag.SkinInfo.Data;
这只输出命名空间。任何想法如何正确地做到这一点?
干杯,
〜在圣地亚哥
答案 0 :(得分:5)
您将需要使用一些序列化程序将.GetSkins()
方法结果转换为json对象。内置JavaScriptSerializer或json.net
JavaScriptSerializer serializer = new JavaScriptSerializer();
viewPage.ViewBag.SkinInfo = serializer.Serialize(SkinManager.GetSkins());
然后在你看来
var skinData = @Html.Raw(ViewBag.SkinInfo);
答案 1 :(得分:3)
这是使用Html帮助程序执行此操作的方法。它会将您的对象转换为json并将其放入javascript变量中。
HtmlHelper扩展方法
public static MvcHtmlString Jsonize(this HtmlHelper helper, string variableName, object obj)
{
StringBuilder str = new StringBuilder();
str.Append("<script type='text/javascript'>");
str.Append("var ");
str.Append(variableName);
str.Append("=");
if (obj == null)
str.Append("null");
else
str.Append(JsonHelper.Serialize(obj));
str.Append(";");
str.Append("</script>");
return MvcHtmlString.Create(str.ToString());
}
json序列化程序。我在这种情况下使用DataContractJsonSerializer。
public class JsonHelper
{
public static string Serialize(object obj)
{
string json = null;
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
json = Encoding.Default.GetString(ms.ToArray());
}
return json;
}
}
完成后,您可以在视图中使用它来创建包含对象的javascript变量
@Html.Jsonize("data", ViewBag.SkinInfo.Data);
将创建如下内容:
<script type='text/javascript'>
var data = { your serialized object };
</script>