1

我是 mvc 的新手,我想在 jquery ajax 调用后显示/隐藏一个 html 控件。
在 ASP.NET 中很简单,例如设置 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;在 index 操作方法中设置(或任何用于创建视图的方法),那么 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调用只是为了设置label的可见性,你可以放心的摆脱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 回答