次のコードも上記の「インデックスビュー」にあると思います:
@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で使用できます。