コントローラでViewBag.IsLocalをtrueに設定しています。 jqueryを使用してViewBag値を確認し、アラートを表示したいと思います。
コード:
if(@ViewBag.IsLocal == true)
{
alert("yeah");
}
アラートが表示されません。 Firebugを使用してViewBagの値を確認すると、True(大文字のT)になります。 == 'True'のようなことをする必要がありますか?私はそれをすべて試しましたが、どれもうまくいきませんでした。
ご協力ありがとう御座います。
H
レンダリングされたページでソースを表示する場合、かみそりのナゲットの代わりに何が挿入されていますか? 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は使用しないでください。ビューモデルと強く型付けされたビューを使用します。
だからここに私が好むより良いアプローチがあります。ビューモデルを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シリアル化できます=>クライアントスクリプトで必要となる部分のみ。
以下の機能が利用できます
function parseBoolean(str)
{
return /^true$/i.test(str);
}
として使用します
if(parseBoolean('@ViewBag.IsLocal') == true)
{
alert("yeah");
}