#javascript #asp.net-mvc-3 #viewbag
#javascript #asp.net-mvc-3 #viewbag
Вопрос:
Как я могу сохранить значение в ViewBag, получая к нему доступ из javascript?
Ответ №1:
Вы не можете сохранить значение в ViewBag из javascript. ViewBag — это концепция серверной части и существует только на сервере. Javascript запускается на клиенте. Что касается сохранения некоторых данных из ViewBag в переменной javascript, вы могли бы использовать следующее:
<script type="text/javascript">
var foo = @Html.Raw(Json.Encode(ViewBag.FooBar))
</script>
С учетом сказанного я всегда советую людям не использовать ViewBag / ViewData в ASP.NET MVC. Я рекомендую использовать строго типизированный вид и модели представлений. Итак, ваш код будет выглядеть следующим образом:
@model MyViewModel
<script type="text/javascript">
var foo = @Html.Raw(Json.Encode(Model))
</script>
Комментарии:
1. @Agzam, где вы хотите получить доступ к этому объекту? В javascript? Это плохо. Это означало бы, что ваши представления будут извлекать информацию из некоторых частей. Представления не должны извлекать информацию. Предполагается, что они используют информацию, которая передается им в качестве модели представления из действия контроллера. Поэтому не стесняйтесь определять модель представления, действие контроллера, которое будет извлекать информацию из любого места, где она хранится (в вашем случае из области приложения), и передавать эту модель представления в представление. Затем внутри этого представления все, что вам нужно сделать, это использовать view model => это все, что должны делать views
2. Теперь, если вы хотите передать некоторую информацию, хранящуюся в переменной javascript, на ваш сервер, у вас есть несколько возможностей: AJAX, HTML-формы, window. location.href, привязки, …
3. @DarinDimitrov — Я только учусь переключаться с веб-форм на MVC и, вероятно, использовал около 20 ваших ответов в последнее время, этот определенно сэкономил мне много времени
Ответ №2:
Вы не можете. ViewBag — это серверная часть, Javascript выполняется на стороне клиента.