Как добраться до переменных Model или Viewbag в теге Script
Vs'12 asp.net С# MVC4 - Int.Appl.Template EF Code First
Вот мой очень простой Script
<script class="TractsScript">
$('#Add').click(function (e) {
var val = @ViewBag.ForSection;
alert(val);
});
</script>
В качестве примера я хочу просто установить переменную в моем Script
или USE a Viewbag.
или Model.
Мне не удалось найти ответ на любом из следующих форумов: StckTrace1, StackTraceBetterAnswer
Другие вещи, которые я пробовал:
var model = @Html.Raw(Json.Encode(Model))
alert(model.Sections);
alert(@ViewBag.ForSection);
Ответы
Ответ 1
Вы можете сделать это, предоставив Json или любую другую переменную:
1) Например, в контроллере вы можете использовать Json.NET
для обеспечения Json
для ViewBag
:
ViewBag.Number = 10;
ViewBag.FooObj = JsonConvert.SerializeObject(new Foo { Text = "Im a foo." });
2) В View
поместите script как в нижней части страницы.
<script type="text/javascript">
var number = parseInt(@ViewBag.Number); //Accessing the number from the ViewBag
alert("Number is: " + number);
var model = @Html.Raw(@ViewBag.FooObj); //Accessing the Json Object from ViewBag
alert("Text is: " + model.Text);
</script>
Ответ 2
Что вы должны работать. Это зависит от типа данных, которые вы устанавливаете, т.е. Если это строковое значение, необходимо убедиться, что оно в кавычках, например.
var val = '@ViewBag.ForSection';
Если это целое число, вам нужно проанализировать его как один i.e.
var val = parseInt(@ViewBag.ForSection);
Ответ 3
попробуйте этот метод
<script type="text/javascript">
function set(value) {
return value;
}
alert(set(@Html.Raw(Json.Encode(Model.Message)))); // Message set from controller
alert(set(@Html.Raw(Json.Encode(ViewBag.UrMessage))));
</script>
Спасибо
Ответ 4
Используйте одинарные кавычки ('
):
var val = '@ViewBag.ForSection';
alert(val);
Ответ 5
Когда вы делаете это
var model = @Html.Raw(Json.Encode(Model));
Вероятно, вы получаете строку JSON, а не объект JavaScript.
Вам нужно разобрать его для объекта:
var model = JSON.parse(model); //or $.parseJSON() since if jQuery is included
console.log(model.Sections);