Asp.net mvc 3 knockout.validation validatedObservable始终返回false

Asp.net mvc 3 knockout.validation validatedObservable始终返回false,asp.net-mvc-3,knockout.js,knockout-validation,Asp.net Mvc 3,Knockout.js,Knockout Validation,因此,我试图为我的局部视图设置ko验证。我几乎实现了与另一个具有ko验证的部分视图相同的设计。它在那里工作得很好,但是在这个局部视图中它不起作用 这是我在javascript中的内容: ko.validation.configure({ insertMessages: false, decorateElement: true, errorElementClass: 'error' }); function Reference(referenceId, id, firstName,

因此,我试图为我的局部视图设置ko验证。我几乎实现了与另一个具有ko验证的部分视图相同的设计。它在那里工作得很好,但是在这个局部视图中它不起作用

这是我在javascript中的内容:

ko.validation.configure({
  insertMessages: false,
  decorateElement: true,
  errorElementClass: 'error'
});

function Reference(referenceId, id, firstName, lastName, title, email, company, phone) {
    this.ReferenceId = ko.observable(referenceId);
    this.Id = id;
    this.FirstName = firstName;
    this.LastName = lastName;
    this.Title = title;
    this.Company = company;
    this.Email = email;
    this.Phone = phone;
}

var viewModel = function () {
        var self = this;

        self.FirstName = ko.observable().extend({ required: true });
        self.LastName = ko.observable().extend({ required: true });
        self.Title = ko.observable();
        self.Email = ko.observable().extend({ required: true, email: true });
        self.Phone = ko.observable().extend({ required: true });
        self.Company = ko.observable().extend({ required: true });


        addReferenceValidationGroup = ko.validatedObservable({
            FirstName: self.FirstName,
            LastName: self.LastName,
            Phone: self.Phone,
            Email: self.Email,
            Company: self.Company
        });

        self.addReference = function () {

            if (!addReferenceValidationGroup.isValid()) {
                console.log(addReferenceValidationGroup.errors());
                addReferenceValidationGroup.errors.showAllMessages();
                return false;
            } else {
                var newReference = new Reference(0, this.CandidateId(), self.FirstName(), self.LastName(), self.Title(), self.Email(), self.Company(), self.Phone());
                console.log(newReference);
                $.ajax({
                    url: '@Url.Action("AddReference")',
                    type: "POST",
                    data: ko.toJSON(newReference),
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (result) {
                        newReference.ReferenceId(result.message); //Sets the InterviewId to the new one
                    },
                    error: function (result) {

                    }
                });
                this.References.push(newReference);

                self.FirstName('');
                self.LastName('');
                self.Title('');
                self.Email('');
                self.Phone('');
                self.Company('');

                self.FirstName.isModified(false);
                self.LastName.isModified(false);
                self.Email.isModified(false);
                self.Phone.isModified(false);
                self.Company.isModified(false);
            }
        };

        self.goNext = function () {
            $.ajax({
                url: '@Url.Action("JobDepartures")',
                type: "POST",
                data: ko.toJSON(this),
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (result) {
                    ko.removeNode(document.getElementById("referencesDiv"));
                    $("#dynamicData").html(result.message);
                }
            });
        };
    };
var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
var mvcModel = ko.mapping.fromJSON(jsonModel);

var myViewModel = new viewModel();
var g = ko.mapping.fromJS(myViewModel, mvcModel);

ko.applyBindings(g, document.getElementById("referencesDiv"));
这是我在HTML中的内容:

<input data-bind="value: FirstName, validationElement: FirstName" class="input" type="text" />
<input data-bind="value: LastName, validationElement: LastName" class="input" type="text" />
此外,此行不会向任何控件添加“error”类。所以它也不会变成高亮度的红色:

addReferenceValidationGroup.errors.showAllMessages();
请帮忙

编辑:以下是模型属性:

public int CandidateId { get; set; }    
public string FirstName { get; set; }    
public string LastName { get; set; }    
public string Title { get; set; }    
public string Email { get; set; }   
public string Phone { get; set; }   
public string Company { get; set; }    
public List<ReferenceViewModel> References
{
   get;
   set;
}
public int CandidateId{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串标题{get;set;}
公共字符串电子邮件{get;set;}
公用字符串电话{get;set;}
公共字符串公司{get;set;}
公开列表参考
{
得到;
设置
}

我认为问题在于以下陈述:

var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
var mvcModel = ko.mapping.fromJSON(jsonModel);

var myViewModel = new viewModel();
var g = ko.mapping.fromJS(myViewModel, mvcModel);

ko.applyBindings(g, document.getElementById("referencesDiv"));
VS。
在JsonConvert.SerializeObject的某个地方,尝试将两个ViewModel映射到一起。

是否有html中所有字段的输入?电话、电子邮件和公司也是如此?是否每个字段都正确填写?是。我填写所有字段以确保提供所需字段。
var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
var mvcModel = ko.mapping.fromJSON(jsonModel);

var myViewModel = new viewModel();
var g = ko.mapping.fromJS(myViewModel, mvcModel);

ko.applyBindings(g, document.getElementById("referencesDiv"));
var viewModel = @Html.Raw(Json.Encode(Model));
ko.applyBindings(viewModel, document.getElementById("referencesDiv"));