我正在尝试执行包含字符串列表的复杂类型的一些模型绑定。我不能使用lambda函数来填充发布的数据,因为我在javascript函数中执行填充。
让我解释一下。我正在使用淘汰赛。
这是我的客户端视图模型:
function Witness(firstName, lastName, telephone, email, propertyNameNumber, street, postcode) {
var self = this;
self.firstName = firstName;
self.lastName = lastName;
self.telephone = telephone;
self.email = email;
self.propertyNameNumber = propertyNameNumber;
self.street = street;
self.postcode = postcode;
self.fullName = ko.computed(function () {
return self.firstName + " " + self.lastName;
});
self.address = ko.computed(function () {
return self.propertyNameNumber + " " + self.street + " " + self.postcode;
});
}
这里是相应的服务器端视图模型类:
public class Witness
{
public string firstName;
public string lastName;
public string telephone;
public string email;
public string propertyNameNumber;
public string street;
public string postcode;
}
我正在表单的提交函数中执行(或尝试执行)表单数据的填充:
$('#GraffitiForm').submit(function () {
for (var i = 0; i < viewModel.witnesses().length; i++) {
var witness = viewModel.witnesses()[i];
$('<input>').attr({ type: 'text' }, { name: '[' + i.toString() + '].firstName' }).val(witness.firstName).appendTo('#GraffitiForm');
// etc for the other properties
}
我知道这很难看,所以如果你能建议一种更好的方法来将数据传送到服务器,我将不胜感激。
问题是当我在提交表单时查看控制器的action方法上的视图模型时,Witnesses属性为null。哎呀!
我做错了什么?
标记
答案 0 :(得分:0)
对于表单填充,您可以使用模板而不是jquery和for循环。模板有利于提高性能和维护性能。主要优点是,如果您想要更改逻辑(如验证等),您可以单独执行此操作而不会破坏其他操作。 因此,最好根据您的模型制作模板。
用于模板绑定更多信息http://knockoutjs.com/documentation/template-binding.html