You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用JavaScript从模型填充HTML元素及选中后填充表单控件

我来帮你搞定这个ASP.NET MVC里单选选中后填充表单的需求!下面是具体实现方案:

解决方案:表格单选选中后自动填充表单数据

首先得先把单选按钮的代码调整好,确保它们属于同一单选组(用户只能选一个),同时把需要的对象数据方便地传递给前端脚本:

@for (int i = 0; i < Model.CustomObject.Count; i++)
{
    <tr>
        <td style="text-align:center">
            <div class="radio">
                @Html.RadioButtonFor(x => x.SelectedCustomObjectId, Model.CustomObject[i].ID, 
                    new { 
                        Id = $"CustomObjectRadio_{i}",
                        @class = "custom-object-radio",
                        data_object = Json.Encode(Model.CustomObject[i]) // 把对象数据存在data属性里,方便后续读取
                    })
            </div>
        </td>
        <!-- 其他展示属性的表格列 -->
        <td>@Model.CustomObject[i].Name</td>
        <td>@Model.CustomObject[i].Description</td>
    </tr>
}

这里的关键调整点:

  • 绑定到ViewModel新增的SelectedCustomObjectId属性,确保所有单选按钮属于同一组,避免多选
  • 给每个单选按钮设置唯一ID(带索引),避免DOM元素ID重复
  • 添加统一的类名custom-object-radio,方便脚本选择元素
  • Json.Encode把当前对象的完整数据存入data-object属性,不用从表格单元格里逐个提取数据

接下来编写JavaScript逻辑,监听单选按钮的选中事件,自动填充文本框和复选框:

jQuery版本(更简洁)

$(document).ready(function() {
    $('.custom-object-radio').on('change', function() {
        // 只处理被选中的单选按钮
        if ($(this).is(':checked')) {
            // 解析data属性里的对象数据
            const selectedObj = JSON.parse($(this).data('object'));
            
            // 填充文本框(假设你的文本框ID是txtName、txtDescription)
            $('#txtName').val(selectedObj.Name);
            $('#txtDescription').val(selectedObj.Description);
            
            // 填充复选框(假设复选框ID是chkIsActive,对应对象的IsActive属性)
            $('#chkIsActive').prop('checked', selectedObj.IsActive);
            
            // 其他属性以此类推,按需添加赋值逻辑
        }
    });
});

原生JS版本(无依赖)

document.addEventListener('DOMContentLoaded', function() {
    const radioButtons = document.querySelectorAll('.custom-object-radio');
    radioButtons.forEach(radio => {
        radio.addEventListener('change', function() {
            if (this.checked) {
                const selectedObj = JSON.parse(this.dataset.object);
                
                document.getElementById('txtName').value = selectedObj.Name;
                document.getElementById('txtDescription').value = selectedObj.Description;
                document.getElementById('chkIsActive').checked = selectedObj.IsActive;
            }
        });
    });
});

额外提示

  • 记得在ViewModel里添加public int SelectedCustomObjectId { get; set; }属性,用来接收选中的对象ID
  • 如果对象包含敏感数据,不要存在data属性里,可以改成只存ID,通过AJAX请求获取完整数据
  • 初始化页面时,如果有默认选中的对象,可以手动触发一次对应单选按钮的change事件,自动填充表单

这样处理后,用户选中表格里的任意单选按钮,对应的文本框和复选框就会自动填充对应的数据啦!

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

火山引擎 最新活动