如何用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




