web-dev-qa-db-ja.com

jqueryでviewbagを使用する-asp.netmvc 3

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

コード:

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

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

ご協力ありがとう御座います。

H

10
bobek

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

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

その理由は、true.ToString()Trueであるためです。

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

_if('@ViewBag.IsLocal' == 'True')
{
  alert("yeah");
}
_
20
Dave Ward

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

21
Darin Dimitrov

以下の機能が利用できます

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

として使用します

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