如何使用knockout和asp.net mvc将多个视图模型绑定到控制器
本文关键字:视图 模型 绑定 控制器 knockout 何使用 asp mvc net | 更新日期: 2023-09-27 18:03:07
我使用knockout, asp.net MVC,实体框架,我想知道如何将子视图模型中的所有信息保存到一个控制器方法
在我的淘汰赛中,我有多个视图模型,其中包含彼此相关的不同信息这样,当我传递到控制器时,我必须传递与所有视图模型相关的信息,这样,当我单击保存按钮保存时,所有信息都保存到各种"不同的表"中在同时我知道如何传递一个视图模型但我想知道如何在一个语句中将两个模型传递给控制器"控制器中的两种不同方法"我当前的结构是这样的
function FullEmployeeProfile ()
var fep = this
{
fep.ei.Name = ko.observable("");
fep.ei.ID = ko.observable("");
fep.ei.Gender = ko.observable("");
fep.ei.address = ko.observable("") ;
fep.eh.CompanyName = ko.observable();
fep.eh.Designation = ko.observable();
fep.eh.StartDate = ko.observable();
fep.eh.EndDate = ko.observable();
}
function employeeHistory() {
var eh = this
var self = this;
eh.CompanyName = ko.observable();
eh.Designation = ko.observable();
eh.StartDate = ko.observable();
eh.EndDate = ko.observable();
}
function employeeEducation() {
var ee = this;
ee.Degree = ko.observable();
ee.YearOfPassing = ko.observable();
ee.Percentage = ko.observable();
ee.Institute = ko.observable()
ee.fullEmployeeDetails = new FullEmployeeProfile();
ee.saveEmployeeDetails = function() {
$.when(postSecureData("/api/EmployeeProfile/", ko.toJSON(ee.fullEmployeeDetails)))
.done(function (empProfile) {
if (response.ResponseRequired == false) {
document.getElementById("save-empDetails-btn").innerHTML = "Saving...";
setTimeout(function () { document.getElementById("save-empDetails-btn").innerHTML = "Save" }, 2500);
$.msgGrowl({
type: 'info',
title: 'Employee information saved',
text: 'Employee information details succesfully saved',
position: 'bottom-right',
lifetime: 3000
}); }
});
};
}
function EmployeeInfo() {
var ei = this;
var ei = this;
ei.Name = ko.observable("");
ei.ID = ko.observable("");
ei.Gender = ko.observable("");
ei.address = ko.observable("") ;
}
正如DavidG建议的那样,可以采用封装模型。你似乎混淆了视图模型和域/数据模型的概念,或者至少你的视图模型的概念有点混乱。
你的视图模型应该准确地,字面上,听起来像什么。它是一个包含特定视图所需的所有信息的模型。如果你需要在你的主视图中包含多个视图,你也需要在你的主视图模型中包含多个视图模型。这是常见的做法。
例如:function EmployeeProfileAndHistory() {
var profile = new FullEmployeeProfile();
var history = new employeeHistory();
}
传递给你的API。(代码可能是错误的,因为不太熟悉knockout,但要点是相同的。)