0

このようにViewModelのプロパティをjqueryで使っています。うまくいきますが、プロパティの値を読んでいるだけです。jquery を使用してプロパティを設定するには、隠し変数を使用します。これは良い習慣ですか?

      if ("@Model.IsTemplate" == "@bool.FalseString") {
        $("#someButton").show();
        if ("@Model.Active" == "@bool.TrueString") {
            $("#activeschedulespan").show();
            $("#inactiveschedulespan").hide();
        }

これがうまく機能するというわけではありませんが、それが良い/悪い習慣であるかどうかを知りたいです. 悪い場合は、代替手段を歓迎します。

ありがとう

4

2 に答える 2

1

それは非常に悪い習慣です。サーバー側の Razor コードとそのような JavaScript を混在させません。モデル (または必要なプロパティのみ) を JSON でシリアル化し、それを直接操作します。

<script type="text/javascript">
    // we serialize the IsTemplate and Active properties of the model because we
    // only need them in javascript, but if we needed other properties we could have
    // included them as well or serialize the entire model
    var model = @Html.Raw(Json.Encode(Model.Select(x => new { x.IsTemplate, x.Active })));

    // now that we have the model javascript variable, let's manipulate it:
    if (!model.IsTemplate) {
        $('#someButton').show();
        if (model.Active) {
            $('#activeschedulespan').show();
            $('#inactiveschedulespan').hide();
        }
    }
</script>

でもねえ、サーバー側で直接実行する必要がある何かに JavaScript を使用しているという印象を受けるのはなぜですか? この特定の例では、サーバー (モデル) で知っている値に基づいて、DOM からのものを表示/非表示にするために JavaScript を使用しています。したがって、この JavaScript を完全に取り除き、モデルのプロパティに基づいて、これらのセクションを DOM に含めるかどうかを決定できます。

于 2012-07-03T06:31:00.777 に答える
0

私はそれが問題だとは思わない。C# コードは、ブラウザーでレンダリングされるときにテキストにコンパイルされるためです。ブラウザでスクリプトを表示すると、次のように表示されます。

  if ("True" == "True") {
    $("#someButton").show();
    if ("False" == "True") {
        $("#activeschedulespan").show();
        $("#inactiveschedulespan").hide();
    }

考慮@Model.IsTemplate= true および@Model.Active = false

ブラウザの開発者ツールを使用して、スクリプトを表示できます。または、ページのソースを参照してスクリプトを見つけます。

于 2012-07-03T04:02:49.880 に答える