我如何输出javascript到一个视图在asp.net mvc3

How can I output javascript to a view in asp.net mvc3?

本文关键字:视图 一个 asp mvc3 net 何输出 输出 javascript      更新时间:2023-09-26

大家早上好,

我有一个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;      

这只是输出名称空间。有什么正确的方法吗?

欢呼,
~ck in San Diego

您将需要使用一些序列化器将您的.GetSkins()方法结果转换为json对象。内置的JavaScriptSerializer或json.net

JavaScriptSerializer serializer = new JavaScriptSerializer();
viewPage.ViewBag.SkinInfo = serializer.Serialize(SkinManager.GetSkins());

然后在你的视图

var skinData = @Html.Raw(ViewBag.SkinInfo);

这里有一种使用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>