Используя viewbag с jquery - asp.net mvc 3
У меня ViewBag.IsLocal установлен в true в контроллере. Я хотел бы использовать jquery для проверки значения ViewBag и отображения предупреждения.
Код:
if(@ViewBag.IsLocal == true)
{
alert("yeah");
}
Я никогда не получаю предупреждение. Когда я использую Firebug, чтобы увидеть значение ViewBag, это True (с большой буквы). Должен ли я сделать что-то вроде == 'True'? Я попробовал все это, и ничего из этого не сработало.
Спасибо за помощь.
ЧАС
3 ответа
Если вы просматриваете источник на отображаемой странице, что вставляется вместо вашего слепка? Если IsLocal
это тип bool, я думаю, вы увидите это:
@if(True == true)
{
alert("yeah");
}
Причина этого в том, что true.ToString()
является True
,
В этом случае вам нужно будет выполнить сравнение строк:
if('@ViewBag.IsLocal' == 'True')
{
alert("yeah");
}
Предполагая, что вы установили для свойства IsLocal логическое значение в действии контроллера:
public ActionResult Index()
{
ViewBag.IsLocal = true;
return View();
}
Вы можете сделать это на виде:
<script type="text/javascript">
@if(ViewBag.IsLocal)
{
<text>alert("yeah");</text>
}
</script>
И, пожалуйста, не используйте ViewBag/ViewData. Используйте модели представлений и строго типизированные виды.
Так что вот лучший подход, который я предпочитаю. Вы можете JSON сериализовать вашу модель представления в переменную javascript и затем работать с ней. Как это:
@model MyViewModel
<script type="text/javascript">
var model = @Html.Raw(Json.Encode(Model));
// at this stage model is a javascript variable containing
// your server side view model so you could manipulate it as you wish
if(model.IsLocal)
{
alert("hello " + model.FirstName);
}
</script>
Очевидно, что если вам не нужна вся ваша модель представления, вы можете JSON сериализовать только ее подмножество => только ту часть, которая понадобится клиентским сценариям.
Вы можете использовать следующую функцию
function parseBoolean(str)
{
return /^true$/i.test(str);
}
и использовать его как
if(parseBoolean('@ViewBag.IsLocal') == true)
{
alert("yeah");
}