Как запросить что-либо у модели, используя переменную JavaScript в cshtml-файле? (ASP.NET )

#c# #javascript #asp.net

#c# #javascript #asp.net

Вопрос:

Мне нужно использовать переменную JS для запроса определенного элемента из массива, который хранится в модели. Как это сделать?

Вот пример кода:

 function CreateCategoryList() 
    {
        var limit = @(Model.CategoriesCount.ToString());

        for (i=0; i<limit; i  )
        {
            var category = '<div class="CategoryItem">'   '@(Model.CategoryList[i].Name.ToString())'   '</div>';                
            $("#CategoriesPopup").append(category);
        }
        alert($(".CategoryItem:first").text());
    }
  

Мне нужно получить доступ к i-му элементу в модели.Список категорий, использующий переменную i в цикле for.

Комментарии:

1. Пожалуйста, уточните свой вопрос…

Ответ №1:

Razor не выполняется на стороне клиента, поэтому приведенный выше пример кода недействителен.

Самое простое решение — сохранить весь массив в виде переменной Javascript на стороне клиента, используя сериализацию. Я использовал Json.NET в примере ниже.

Я бы посоветовал вам изучить, что выполняется на сервере, а что — на стороне клиента. Это поможет вашему пониманию при написании представлений.

 function CreateCategoryList() 
{
    var limit = @(Model.CategoriesCount.ToString());
    var clientSideArray = JSON.parse('@(JsonConvert.SerializeObject(Model.CategoryList))');

    for (i=0; i<limit; i  )
    {
        var category = '<div class="CategoryItem">'   clientSideArray[i]   '</div>';                
        $("#CategoriesPopup").append(category);
    }
    alert($(".CategoryItem:first").text());
}
  

Комментарии:

1. Спасибо. Я думаю, это именно то, что мне нужно. Но есть одна проблема. Строка var clientSideArray = JSON.Parse('@(JsonConvert.SerializeObject(Model.CategoryList))'); делает мой код неисполнимым. Я вижу в консоли ошибку «Uncaught TypeError: неопределенный не является функцией». Как это исправить?

2. Извините, это будет на JSON.Parse . это должно быть JSON.parse в нижнем регистре p . Обратите внимание, что для использования JSON.parse в старых браузерах вам необходимо включить библиотеку (такую как json2.js )

3. Это не решило всю проблему. Теперь я получаю ошибку «Неожиданный токен amp;». Я также заметил, что строка для разбора содержит amp;quot вместо обычных quot («»). Может быть, мне следует предотвратить преобразование » -> amp;quot. Но как?

4. Решается самостоятельно. Требуется использовать @Html.Raw(JsonConvert.SerializeObject(Модель. Список категорий )).