我有一个最初加载了空白视图模型的视图。我想用一个json对象(获得的视图ajax post)填充已经渲染的视图,该对象基于该视图的viewmodel。
有没有办法自动执行此操作?
有没有办法反向做? (匹配viewmodel json对象的字段)
答案 0 :(得分:0)
我知道从ajax调用返回数据并将其放入字段的唯一方法是手动
$('#TextField1').val(result.TextField1);
etc..
将其发送回您可以执行的控制器
data: $('form').serialize(),
这将获取该表单中的所有字段并将它们发送回控制器
答案 1 :(得分:0)
好吧,看起来这符合我的需求。 我需要遵循一个约定容器的约定,该容器的名称与它们各自的属性相同,并且在它们上面放一个类来表示它们包含子字段。
function MapJsonObjectToForm(obj, $container) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var $field = $container.find('#' + key);
if ($field.is('div')) {
MapJsonObjectToForm(obj[key], $field);
} else {
if (obj[key] == null) {
if ($field.hasClass('select2-offscreen')) {
$field.select2('val', '');
$field.select2().trigger('change');
} else {
$field.val("");
}
} else {
if ($field.hasClass('select2-offscreen')) {
$field.select2('val', obj[key]);
$field.select2().trigger('change');
} else {
$field.val(obj[key]);
}
}
}
}
}
}
function MapFormToJsonObject(containerid) {
var obj = {};
$('.dataitem').each(function () {
var exclude = "s2id";
if ($(this).attr("ID").substring(0, exclude.length) !== exclude) {
var parents = $(this).parents(".has-sub-fields");
if (parents.length > 0) {
obj = FindParents(obj, parents.get(), $(this).attr("ID"), $(this).val());
} else {
obj[$(this).attr("ID")] = $(this).val();
}
}
});
return obj;
}
function FindParents(obj, arr, id, value) {
if (arr.length == 0) {
obj[id] = value;
return obj;
}
var parentID = $(arr[arr.length - 1]).attr("ID");
arr.pop();
if (obj[parentID] == null) {
obj[parentID] = {};
}
obj[parentID] = FindParents(obj[parentID], arr, id, value);
return obj;
}