首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC Control.Visible

MVC Control.Visible
EN

Stack Overflow用户
提问于 2012-11-08 13:38:27
回答 2查看 3.6K关注 0票数 1

我是mvc的新手,我想在jquery ajax调用之后显示/隐藏一个html控件。

在ASP.NET中很简单,比如设置Label.Visible = false。

我有一个类似这样的剃刀视图:

代码语言:javascript
运行
复制
    @if (ViewBag.Show)
    {
        Html.Label("Test");
    }

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

以及一个包含jquery的脚本来调用操作

代码语言:javascript
运行
复制
    $("#idClick").click(function() {
            $.ajax({
                    url: '/Test/ShowLabel',
                    type: 'GET',
                    dataType: 'json'
                    }
                });

在索引视图中,我设置了:

代码语言:javascript
运行
复制
    ViewBag.Show = false;

在行动中:

代码语言:javascript
运行
复制
    public void ShowLabel()
    {
        ViewBag.Show = true;
    }

但是我不能让标签显示出来

我希望避免呈现控件,然后应用样式将其隐藏。

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-08 13:42:07

我假设下面的代码也在“索引视图”上:

代码语言:javascript
运行
复制
@if (ViewBag.Show)
{
    Html.Label("Test");
}

如果是这种情况,则在使用ViewBag.Show = false;时将覆盖索引视图中的ViewBag.Show。删除这一行,它将显示您的文本框。

编辑

我刚刚注意到您的" action“返回void--这意味着如果调用此action方法,则不会呈现任何视图。似乎你需要阅读更多关于ASP.NET MVC如何工作的知识,或者重新表述你的问题。

如果您没有在索引操作方法(或用于创建视图的任何方法)中设置ViewBag.Show = true;,那么ViewBag.Show将缺省为false。确保将变量设置在实际被调用的位置,并且不要在视图中覆盖它。

编辑2

为了响应您的编辑,请根本不要使用ViewBag来隐藏控件。相反,只需将匿名类型传递给HTML帮助器:

代码语言:javascript
运行
复制
Html.Label("Test", new { style = "display: none;" })

或者改用CSS类:

代码语言:javascript
运行
复制
Html.Label("Test", new { @class = "some-class-with-display-none" })

编辑3

您的问题真的很难理解,我看到您试图使用Ajax将ViewBag发回页面。你不能这么做。ViewBag是一个仅在服务器端使用的“包”,它只用于最初呈现页面。您可以从操作方法返回Json/Xml,以指示标签是隐藏的还是可见的,也可以使用部分页面更新。

我认为,基于您所拥有的大量零散信息,明智的做法是先从同步页面开始,在进行ASP.NET调用之前先了解Ajax MVC是如何工作的。

编辑4

您似乎希望能够根据Ajax调用的结果更改标签的可见性。由于当您的用户已经呈现页面时,ViewBag不会更改任何内容,因此您需要通过JSON、XML或部分页面刷新将结果返回到您的页面。最简单的方法是返回一些JSON:

代码语言:javascript
运行
复制
public JsonResult ShowLabel ()
{
    return Json (new { result = true }, JsonRequestBehavior.AllowGet);
}

然后将ID添加到您的标签:

代码语言:javascript
运行
复制
<label id="testLabel" style="display: none">Test</label>

然后进行Ajax调用:

代码语言:javascript
运行
复制
$.ajax({
    url: '/Test/ShowLabel'
    type: 'GET',
    dataType: 'json'
}).success(function (d) {
    if (d.result) {
        $('#testLabel').show();
    }
});

最终编辑

既然我看到您想要这个用于验证,那么您就可以省去很多麻烦,并使用Remote Validation的内置机制。

票数 2
EN

Stack Overflow用户

发布于 2012-11-08 13:58:06

尝试这个(不在ViewBag中设置任何内容)

注意:如果ajax调用只是为了设置标签的可见性,那么您可以安全地摆脱ajax调用。

代码语言:javascript
运行
复制
 <label for="Test" style="display:none;"></label>

 $("#idClick").click(function() {
            $.ajax({
                    url: '/Test/ShowLabel',
                    type: 'GET',
                    dataType: 'json'
                    }
                });
     $("label[for='Test']").css("display", "block")
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13283122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档