我有一个带有行的父表。
当他们选择一行时,将触发 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句