Подтвердить что ты не робот

Рабочий пример для JavaScriptResult в asp.net mvc

Может ли кто-нибудь предоставить рабочий пример JavaScriptResult в asp.net mvc. Я понимаю, что он возвращает javascript, который затем выполняется на стороне клиента, а также что тип содержимого ответа задан как text/javascript. Мне нужен рабочий пример, чтобы увидеть это в действии.

4b9b3361

Ответ 1

Избегайте, если возможно

JavaScriptResult считается анти-шаблоном, который представил Asp.net MVC (полное разделение проблем), поскольку он соединяет Controller и View обратно вместе, чтобы сделать их зависимыми от eachother. В чистом asp.net MVC-приложении, где пользовательский интерфейс построен на Asp.net MVC и стороне сервера, служит только для этой клиентской реализации, поэтому рекомендуется избегать этой функции.

Это может быть полезно в других сценариях. Я помню, что я читал что-то, связанное с клиентами Ruby on Rails.

В любом случае.

Пример, который имеет смысл

Фактическим примером может быть возвращение кода JavaScript в запрос Ajax, который просто предоставит некоторые функции, которые будут выполняться сразу после ответа без каких-либо манипуляций с данными.

Где вы могли бы извлечь выгоду из этого? Хорошо подумайте о приложении, которое имеет огромное количество различных клиентских классов, используемых приложением. Но некоторые страницы используют только небольшую часть (или даже динамическую фракцию). В этом случае у вас будет две возможности:

  • Загрузите все дерево классов клиента вверх - либо в огромном одиночном файле, либо фрагментированном в отдельных файлах (это было бы хорошо, если бы представления использовали небольшой подмножество известных классов, потому что иначе это приведет к большому количеству серверных запросов)
  • Загружать классы по требованию, когда они необходимы, или, возможно, даже выполнять определенные функции класса по требованию, когда и если они необходимы.

В этом конкретном случае второй сценарий будет намного лучше и намного эффективнее с точки зрения сетевого трафика, ресурсов клиентской памяти и загрузки процессора.

Ответ 2

Здесь практический случай: У меня есть статический класс Глобальный, который содержит статические свойства значений, которые используются во всей системе.

Некоторые из этих значений должны использоваться совместно с JS. Поэтому я создал Action, который возвращает JavaScriptResult.

[OutputCache(Duration = 999999)]
public virtual JavaScriptResult Global()
{
    var script = string.Format(@"
        MaxNotificaitonsToShow = {0};
        ItemsPerPage = 25;",
    GlobalSettings.MaxNotificaitonsToShow);
    return JavaScript(script);
}

И в нижнем колонтитуле страницы я загружаю страницу:

<script type="text/javascript" src="/JS/Global"></script>

Теперь я могу получить значения в любом файле Javascript:

if(ItemsPerPage == 25)
{
   alert('it works!');
}

Ответ 3

Проверьте мой ответ в этом сообщении;

MVC как вернуть команду для запуска javascipt-метода?

Это вернет частичный вид страницы. Если вы хотите повторить через объект json, верните объект json из своего контроллера и используйте что-то вроде следующего:

var obj = eval('(' + msg + ')');

msg above - возвращаемый объект из вашего контроллера;

то

$.each(obj.Objects, function() { do something with object });

"Объекты" выше - это свойство в возвращаемом объекте json.

Итак, в С#

public class JsonObject()
{
  List<MyObjectList> Objects{get;set;}
}

Верните вышеуказанный объект в представление.

Это имеет смысл или вам нужен рабочий образец?