Как я могу вывести JavaScript для просмотра в asp.net mvc3? - PullRequest
0 голосов
/ 07 апреля 2011

Доброе утро всем,

У меня есть переменная 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 в Сан-Диего

Ответы [ 2 ]

5 голосов
/ 07 апреля 2011

Вы захотите использовать какой-нибудь сериализатор для преобразования результата вашего метода .GetSkins() в объект json.Либо встроенный JavaScriptSerializer, либо json.net

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

А потом на ваш взгляд

var skinData = @Html.Raw(ViewBag.SkinInfo);
3 голосов
/ 07 апреля 2011

Вот способ сделать это с помощью 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...