1

以下のMVCビューコードでは、isLoggedInDbに緑色の下線が引かれ、ツールチップに期待される';'が表示されています。。明らかに;があり、Googleにとっては難しい; その上。他の人がこの方法でJavaScriptサーバーサイドを作成するのに問題があるのを見たので、おそらくそれはベストプラクティスではありません。これは無視する必要がありますか、それともIntellisenseが文句を言う正当な理由がありますか?

@* SHTML Code Above *@

<script type="text/javascript">
    @{  
        string isLoggedInDb;

        if(Session["isLoggedInDb"] != null)
        {
            if(Session["isLoggedInDb"].ToString() == "1") 
            {
                isLoggedInDb = "1";
            }
            else
            {
                isLoggedInDb = "0";
            }
        }
    }

    var dblogin=@(isLoggedInDb);

    @*....etc*@

    }

編集

JavaScriptをプログラムで構築することは、JavaScriptを別々のファイルに保持することがベストプラクティスと見なされる可能性があるため、おそらく最善のアイデアではないことに気づきました。JavaScriptが代わりに読み取るHTMLに隠れた変数をプログラムする必要があると思います。多分誰かがこれを確認することができます。

4

3 に答える 3

2

100%確信はありませんが、Razorコードブロックに含まれているため、コンパイラはC#コードとして表示していると思います。@{ }

これを試して:

<script type="text/javascript">
    string isLoggedInDb;

    @if(Session["isLoggedInDb"] != null)
    {
        if(Session["isLoggedInDb"].ToString() == "1") 
        {
            <text>isLoggedInDb = "1";</text>
        }
        else
        {
            <text>isLoggedInDb = "0";</text>
        }
    }
</script>

サーバー上でJSを構築することに関しては、私は個人的にその考えに耐えられません(クライアント/サーバー/ cssコードをマージするのは好きではありません)。そのパフォーマンスについて話すことはできませんが、スクリプトを簡単にデバッグおよび管理する機能が失われることは言うまでもなく、すべてのJSがどこから来ているかを追跡する悪夢のメンテナンスシナリオに自分自身を設定していると言えます。

于 2012-06-16T00:55:04.613 に答える
2

間違いなく、次のようなアプローチを取るべきだと思います。

var isLoggedOn = @Model.IsLoggedInDb

IsLoggedInDbはViewModelの一部である必要があり、Viewはセッションをチェックしてはなりません。これは非常に脆弱で、簡単にテストできません。コントローラーの目的は、プレゼンテーション層(ビュー)のデータを調整することです。

于 2012-06-16T07:20:28.807 に答える
1

コードはそのまま動作するはずですが、Razorパーサーはjavascriptインテリセンスと戦っています。したがって、次のように、スクリプトタグ内にある必要がないため、すべてのC#コードロジックをスクリプトタグから移動することをお勧めします。

@{  
        string isLoggedInDb;

        if(Session["isLoggedInDb"] != null)
        {
            if(Session["isLoggedInDb"].ToString() == "1") 
            {
                isLoggedInDb = "1";
            }
            else
            {
                isLoggedInDb = "0";
            }
        }
    }

 @*....etc*@

<script type="text/javascript">

    var dblogin=@(isLoggedInDb);


..etc..
</script>
于 2012-06-16T00:57:56.593 に答える