如何在ASP.NET MVC 5中执行复杂类型的模型绑定

时间:2014-03-04 14:57:18

标签: knockout.js asp.net-mvc-5 model-binding

我正在尝试执行包含字符串列表的复杂类型的一些模型绑定。我不能使用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。哎呀!

我做错了什么?

标记

1 个答案:

答案 0 :(得分:0)

对于表单填充,您可以使用模板而不是jquery和for循环。模板有利于提高性能和维护性能。主要优点是,如果您想要更改逻辑(如验证等),您可以单独执行此操作而不会破坏其他操作。 因此,最好根据您的模型制作模板。

用于模板绑定更多信息http://knockoutjs.com/documentation/template-binding.html