10

コントローラでViewBag.IsLocalをtrueに設定しています。jqueryを使用してViewBag値を確認し、アラートを表示したいと思います。

コード:

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

アラートが表示されることはありません。Firebugを使用してViewBagの値を確認すると、True(大文字のT)です。=='True'のようなことをする必要がありますか?私はそれをすべて試しましたが、どれもうまくいきませんでした。

助けてくれてありがとう。

H

4

3 に答える 3

21

コントローラアクションでIsLocalプロパティをブール値に設定したと仮定します。

public ActionResult Index()
{
    ViewBag.IsLocal = true;
    return View();
}

ビューでこれを行うことができます:

<script type="text/javascript">
    @if(ViewBag.IsLocal)
    {
        <text>alert("yeah");</text>
    }
</script>

また、ViewBag/ViewDataは使用しないでください。ビューモデルと強く型付けされたビューを使用します。

だからここに私が好むより良いアプローチがあります。ビューモデルをJavaScript変数にJSONシリアル化して、それを処理することができます。このような:

@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シリアル化できます=>クライアントスクリプトで必要となる部分のみ。

于 2011-10-26T15:48:40.250 に答える
20

レンダリングされたページでソースを表示する場合、かみそりのナゲットの代わりに何が挿入されていますか?がブール型の場合IsLocal、次のように表示されると思います。

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

その理由true.ToString()はですTrue

その場合、そこで文字列を比較する必要があります。

if('@ViewBag.IsLocal' == 'True')
{
  alert("yeah");
}
于 2011-10-26T15:50:50.473 に答える
0

次の機能を使用できます

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

として使用します

if(parseBoolean('@ViewBag.IsLocal') == true) 
{ 
   alert("yeah");
}
于 2012-09-26T12:26:51.907 に答える