ajax - 如何使用 AJAX 结果更新 Master detail razor 页面中的模型
问题描述
我有一个带有行的父表。
当他们选择一行时,将触发一个返回子详细信息的 AJAX 调用。
我有多个显示子属性的文本框
<div class="row">
@Html.CheckBoxFor(m => m.Child.Property)
@Html.LabelFor(m => m.Child.Property)
</div>
但我看不到如何用我在 AJAX 结果中得到的孩子更新文本框。
我能做的最好的事情是从“完整”方法手动更新每个字段。但是我还有大约 30 个字段要添加,这感觉像是错误的方法。
如何在不使用局部和不刷新整个页面的情况下将编辑框绑定到返回的模型?
我在@model 中添加了 Child 作为属性,并且 TextFor 似乎可以正确绑定。但是当然
@Model.Child = child
才不是。所以他们从不显示任何数据。
解决方案
这个问题是基于我的一个误解。起初,当我意识到自己的错误时,我删除了这个问题。我正在恢复它,因为我认为对于新手来说这是一个容易陷入的错误,一旦你这样做,答案就很难理清了。
问题是,一旦页面被渲染,@model 就不再存在了。没有像我想象的那样在幕后进行数据绑定。
你的选择是
手动填充元素。(这将需要编辑以适合您的特定元素)
function DisplayMergeSection(data) { for (var key of Object.keys(data)) { DisplayElement(data, key, "#Clients_"); } } function DisplayElement(data, key, prefix) { return; var val = data[key]; var valString = data[key + "String"]; var element = $(prefix + key)[0]; if (element && element.type === 'text') { if ((val || '').toString().indexOf("Date(") > -1) { var dtStart = new Date(parseInt(val.substr(6))); element.value = moment(dtStart).format('MM/DD/YYYY'); } else { element.value = val; } } else if (element && element.type === 'checkbox') { element.checked = val; } else if (element && element.type === 'select-one') { element.value = valString; } else if (element && element.nodeName === 'DIV') { if ((val || '').toString().indexOf("Date(") > -1) { var dtStart = new Date(parseInt(val.substr(6))); element.innerText = moment(dtStart).format('MM/DD/YYYY'); } else { element.innerText = val; } } }
创建一堆带有敲除的可观察对象,然后设置数据绑定。这干净多了。
https://knockoutjs.com/documentation/json-data.html使用淘汰插件设置映射。
https://knockoutjs.com/documentation/plugins-mapping.html
推荐阅读
- excel - Excel VBA:在for循环中跳过复制的单元格
- node.js - 尝试使用 FFMPEG 通过 RTMP 流式传输实时视频时收到连接被拒绝错误
- acumatica - 登录 Acumatica 20 R2 时出现问题
- android - Cordova-android v 9.0.0 构建失败。无效的 Cordova android 平台。缺少 API.js
- javascript - 如何使页脚上的链接触发弹出窗口?
- mockmvc - 如何使用 MockMvc 在单元测试中启用 Spring Cloud sleuth
- python - 查找仅存在于两个列表之一中的元素
- java - 替换字符串中的 Unicode 字符
- apache-spark - 设置 spark.network.crypto.enabled=true 后 Spark master 无法访问
- apache-spark - PySpark:将字符串转换为列的字符串数组