You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP MVC Razor视图基于数据库记录自动控制文本框显隐的实现方法

实现方案

你可以通过两种方式实现页面加载时自动根据数据库读取的Type值控制文本框显隐:

方案1:JS初始化调用(保留原有交互逻辑)

首先修改你的JS代码,移除无用的modernizr引入,添加页面加载完成后的初始化逻辑:

<script type="text/javascript">
    function text(x) {
        if (x == 0) {
            document.getElementById("name").style.display = "block";
            document.getElementById("address").style.display = "none";
        } else {
            document.getElementById("name").style.display = "none";
            document.getElementById("address").style.display = "block";
        }
        return;
    }

    // 页面加载完成后自动根据后端Model的Type值初始化显隐
    document.addEventListener('DOMContentLoaded', function(){
        // 从数据库读取的Type值如果是A传0,是B传1
        text('@Model.Type' == 'A' ? 0 : 1);
    });
</script>

这种方案不需要修改原有单选框的交互逻辑,页面加载后会自动触发显隐控制。

方案2:服务端直接渲染样式(无闪烁,体验更好)

你可以直接在Razor视图里根据Model.Type的值给文本框容器加行内样式,不需要等待JS加载就能正确显示:

<!-- 单选框部分保持不变 -->
@Html.LabelFor(Model => Model.Type, "A")
@Html.RadioButtonFor(Model => Model.Type, "A" , new { @onclick = "text(0)", @id = "but1" })

@Html.LabelFor(Model => Model.Type, "B")
@Html.RadioButtonFor(Model => Model.Type, "B" , new { @onclick = "text(1)", @id = "but2" })

<!-- 文本框部分直接加服务端渲染的样式 -->
<div class="form-group col-md-6" id="name" style="display:@(Model.Type == "A" ? "block" : "none")">
    @Html.LabelFor(model => model.name, new { @class = "control-label" })
    @Html.TextBoxFor(model => model.name, new { @class = "form-control" })
</div>
<div class="form-group col-md-6" id="address" style="display:@(Model.Type == "B" ? "block" : "none")">
    @Html.LabelFor(model => model.address, new { @class = "control-label" })
    @Html.TextBoxFor(model => model.address, new { @class = "form-control" })
</div>

这种方案页面首次渲染就会显示正确的状态,不会出现JS加载前文本框显示异常的闪烁问题,建议优先使用。

内容的提问来源于stack exchange,提问作者iamnew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:36:00