1

私は mvc が初めてで、jquery ajax 呼び出しの後に html コントロールを表示/非表示にしたいと考えています。
ASP.NET では set Label.Visible = false のように単純です。

私は次のようなかみそりのビューを持っています:

    @if (ViewBag.Show)
    {
        Html.Label("Test");
    }

    <input id="idClick" type="button" value="Click"/>

アクションを呼び出すjqueryを使用したスクリプト

    $("#idClick").click(function() {
            $.ajax({
                    url: '/Test/ShowLabel',
                    type: 'GET',
                    dataType: 'json'
                    }
                });

私のインデックスビューでは、次のように設定しました:

    ViewBag.Show = false;

アクションで:

    public void ShowLabel()
    {
        ViewBag.Show = true;
    }

しかし、ラベルを表示できません

コントロールのレンダリングを避け、スタイルを適用して非表示にしたい

これどうやってするの?

4

2 に答える 2

2

次のコードも上記の「インデックスビュー」にあると思います:

@if (ViewBag.Show)
{
    Html.Label("Test");
}

その場合は、ViewBag.Show使用時にインデックス ビューで上書きしていますViewBag.Show = false;。その行を削除すると、テキストボックスが表示されます。

編集

「アクション」が void を返していることに気付きました。つまり、このアクション メソッドが呼び出された場合、ビューはレンダリングされません。ASP.NET MVC のしくみについて詳しく調べるか、質問を言い換える必要があるようです。

インデックス アクション メソッド (またはビューの作成に使用されているメソッド) で設定しない場合ViewBag.Show = true;、ViewBag.Show はデフォルトで false になります。実際に呼び出されている場所に変数を設定していることを確認し、ビューで上書きしないでください。

編集 2

編集に応じて、を使用しViewBagてコントロールを非表示にしないでください。代わりに、匿名型を HTML ヘルパーに渡すだけです。

Html.Label("Test", new { style = "display: none;" })

または、代わりに CSS クラスを使用します。

Html.Label("Test", new { @class = "some-class-with-display-none" })

編集 3

あなたの質問は理解するのが非常に難しく、Ajax を使用してページに送り返そうとしていたようViewBagです。これはできません。はViewBag、ページを最初にレンダリングするためにのみ使用されるサーバー側専用の「バッグ」です。アクション メソッドから Json/Xml を返して、ラベルを非表示にするか表示するかを示すか、部分的なページ更新を使用することができます。

あなたが持っている散在する情報の量に基づいて、最初に同期ページから始めて、Ajax 呼び出しを投げる前に ASP.NET MVC がどのように機能するかの感触をつかむのが賢明かもしれません。

編集 4

Ajax 呼び出しの結果に基づいてラベルの可視性を変更できるようにしたいようです。ユーザーがすでにページをレンダリングしている場合は何も変わらないためViewBag、JSON、XML、またはページの部分的な更新を介して結果をページに返す必要があります。最も簡単なのは、JSON を返すことです。

public JsonResult ShowLabel ()
{
    return Json (new { result = true }, JsonRequestBehavior.AllowGet);
}

次に、ID をラベルに追加します。

<label id="testLabel" style="display: none">Test</label>

そして、Ajax 呼び出しを行います。

$.ajax({
    url: '/Test/ShowLabel'
    type: 'GET',
    dataType: 'json'
}).success(function (d) {
    if (d.result) {
        $('#testLabel').show();
    }
});

最終編集

検証のためにこれが必要だと思うので、頭痛の種を大幅に節約し、組み込みのメカニズムをRemote Validationで使用できます。

于 2012-11-08T05:42:07.467 に答える
0

これを試してください(に何も設定せずにViewBag

注: ajax 呼び出しがラベルの可視性を設定するためだけのものである場合は、ajax 呼び出しを安全に取り除くことができます。

 <label for="Test" style="display:none;"></label>

 $("#idClick").click(function() {
            $.ajax({
                    url: '/Test/ShowLabel',
                    type: 'GET',
                    dataType: 'json'
                    }
                });
     $("label[for='Test']").css("display", "block")
  });
于 2012-11-08T05:58:05.760 に答える