Может ли кто-нибудь предоставить рабочий пример JavaScriptResult в asp.net mvc. Я понимаю, что он возвращает javascript, который затем выполняется на стороне клиента, а также что тип содержимого ответа задан как text/javascript. Мне нужен рабочий пример, чтобы увидеть это в действии.
Рабочий пример для JavaScriptResult в asp.net mvc
Ответ 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;}
}
Верните вышеуказанный объект в представление.
Это имеет смысл или вам нужен рабочий образец?