【问题标题】:MVC 4 display/hide a textbox based on a checkbox checkMVC 4基于复选框检查显示/隐藏文本框
【发布时间】:2015-10-03 08:31:39
【问题描述】:

MVC 新手——从来都不是前端 Web 开发人员(主要是后端),所以我不太了解前端的良好设计。现在,我正在尝试在没有太多原始 WebForm 知识的情况下使用 MVC……话虽如此,请给我一些关于如何处理以下问题的指针/链接/好主意:

我有一个文本框字段,我想根据复选框显示/隐藏。我的视图中有这些字段@using (Html.BeginForm()...

我应该在 javascript 或控制器操作中更改文本框的属性吗?如果我使用 javascript,我很难获得 beginform 中的值,但如果我使用控制器操作,我不确定如何/在我的控制器操作中传递/传递什么。

【问题讨论】:

  • 我会用 JS 来做显示/隐藏功能。 jquery,但在控制器中处理表单数据。
  • 使用 jquery 处理复选框切换:stackoverflow.com/questions/3442322/…。然后用jquery隐藏文本框:api.jquery.com/hide
  • 您可以使用javascript。在Javascript中,您可以使用复选框和文本框。您不能在服务器端(在您的控制器中)设置元素属性

标签: javascript asp.net-mvc


【解决方案1】:

如果我想操作 DOM,我喜欢使用 jQuery。

这里是例子 -

查看

@using (Html.BeginForm())
{
    @Html.CheckBoxFor(model => model.MyBooleanValue)
    <br />
    @Html.TextBoxFor(model => model.MyTextValue)
    <br />
    <input type="submit" value="Submit" />
}

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
    $(function () {
        $("#MyBooleanValue").click(function () {
            if ($(this).is(':checked')) {
                $("#MyTextValue").show();
            }
            else {
                $("#MyTextValue").hide();
            }
        });
    });
</script>

控制器

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            MyBooleanValue = true
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        if (model.MyBooleanValue)
        {
            string text = model.MyTextValue;
        }

        return View(model);
    }
}

型号

public class MyViewModel
{
    public bool MyBooleanValue { get; set; }
    public string MyTextValue { get; set; }
}

仅供参考: 我建议观看一些培训视频(ASP.NET MVC 5 Fundamentals 的免费课程)或在开始之前阅读一两本书。否则,你会感到沮丧。

【讨论】:

  • 没错,msdn 教程也是不错的起点,但是你推荐哪两本书,我是指帮助你学习的书名?
  • 我建议 Adam Freeman 的 Pro ASP.NET MVC 5 进行逐步学习,并建议 Professional ASP.NET MVC 5 供参考。
【解决方案2】:

您对视图所做的任何更改(前端 UI 操作)都应使用 Javascript 完成,除非您从/向数据库获取或设置一些数据。在这种情况下,它看起来不是数据操作,所以它是纯 javascript UI 操作

你想要做的是给你的文本框和你的输入一个类或 id,这样你就可以用 javascript 访问它们。然后使用它,您可以决定是否选中/取消选中复选框以隐藏/取消隐藏文本框

这里有一些有用的链接可以帮助您入门:

check if checkbox is checked javascript

Check if checkbox is checked with jQuery

jquery - show textbox when checkbox checked

How to hide and show item if checkbox is checked

通常,您将访问您的服务器(控制器)主要是为了将视图中的数据保存到数据库中,或者从数据库中检索数据以显示在您的视图中。

在 Html 助手上设置 id。 @Html.TextBoxFor您需要以下内容:

@Html.TextBoxFor(x =&gt; x.property, new { @id = "someId" }

如果你想要其他 html 属性:

@Html.TextBoxFor(x =&gt; x.property, new { @id = "someId", @class="someClass" }

【讨论】:

  • 我将检查这些链接,看看它是否回答了这个问题,但我目前有一个 javascript,我在我的复选框的 onclick 上运行,如下所示:function test() { document.getElementById("OtherProvider" ).style.display = 'in-line'; document.getElementById("Test").value = 'changed';警报(“帮助”); } 但 document.getElementById 在我的 html.beginform 中找不到元素
  • 你在这些上设置了 id 吗?查看我的更新答案
  • 我在做@Html.TextBox("OtherProvider", "---fill in---", new { style = "display: in-line"})。我在 TextBox 上没有看到其中包含 id 的方法,但我没有使用 TextBoxFor,因为“OtherProvider 不在我的模型中......这是他们将填写的字段,我将复制到另一个我的模型中的字段,它与只有一组值的下拉列表相关联
猜你喜欢
  • 2019-09-16
  • 2015-01-19
  • 2020-03-31
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 2022-07-01
相关资源
最近更新 更多