【问题标题】:How to bind multiple view models to controller using knockout and asp.net mvc如何使用敲除和 asp.net mvc 将多个视图模型绑定到控制器
【发布时间】:2015-10-07 01:43:31
【问题描述】:

我正在使用 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("") ;     
    }

【问题讨论】:

  • 为什么不直接创建一个封装这两个视图模型的视图模型?
  • 我会怎么做会是这样吗? var masterVM = (function () { this.EducationalDetails = new EducationalDetails(), this.EmploymentHistory = new ModelEmploymentHistory(); });
  • 是的,这可行,将您的 masterVM 传递给控制器​​并单独处理包含的模型。

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 knockout.js


【解决方案1】:

正如 DavidG 所建议的,封装模型是可以采用的方法。您似乎对视图模型和域/数据模型的概念感到困惑,或者至少您对视图模型的概念有些困惑。

您的视图模型应该完全符合字面意思。它是一个包含特定视图所需的所有信息的模型。如果您需要在主视图中包含多个视图,则还需要在主视图模型中包含多个视图模型。这是常见的做法。

例如:

function EmployeeProfileAndHistory() {
    var profile = new FullEmployeeProfile();
    var history = new employeeHistory();
}

将此传递给您的 API。 (代码可能是错误的,因为对淘汰赛不太熟悉,但要点是一样的。)

【讨论】:

  • 好的,那么 API 的传递将是 var fullEmployeeDetail = new EmployeeProfileAndHistory(); $.when(postSecureData("/api/EmployeeProfile/", ko.toJSON(ee.fullEmployeeDetails)))
  • 是的,如果您使用我的版本,那将是正确的。确保您的变量名称匹配;)
  • 天啊偷了我的想法! :) 但是,是的,+1
  • 您不需要代表先生! ;D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2015-04-21
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多