С помощью viewbag с jquery - asp.net mvc 3

У меня есть ViewBag.IsLocal установлен на true в контроллере. Я хотел бы использовать jquery для проверки значения ViewBag и отображения предупреждения.

код:

if(@ViewBag.IsLocal == true)
{
alert("yeah");
}

Я никогда не получаю предупреждение. Когда я использую Firebug, чтобы увидеть значение ViewBag it True (с капиталом T). Должен ли я делать что-то вроде "Истинный"? Я пробовал все это, и никто из них не работал.

Благодарим вас за помощь.

Н

Ответ 1

Если вы просматриваете источник на странице рендеринга, то что вставлено вместо вашего самородка бритвы? Если IsLocal - тип bool, я думаю, вы увидите следующее:

@if(True == true)
{
  alert("yeah");
}

Причина этого в том, что true.ToString() - True.

В этом случае вам нужно провести сравнение строк:

if('@ViewBag.IsLocal' == 'True')
{
  alert("yeah");
}

Ответ 2

Предполагая, что вы установили свойство 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 сериализовать только подмножество из нее = > только часть, которая потребуется для клиентских скриптов.

Ответ 3

Вы можете использовать следующую функцию

function parseBoolean(str)
{ 
   return /^true$/i.test(str);
}

и используйте его как

if(parseBoolean('@ViewBag.IsLocal') == true) 
{ 
   alert("yeah");
}