0

1. 我有一个 Truck 类,它有一个名为 AxleTypes 的集合,带有以下标记:

public class AxleType : Entity
{
    public string Description { get; set; }
    public string Type { get; set; }
}

2. 我的 Angular 表单包括以下内容(为了尽可能简短,我省略了表单的其他轴类型,并且我使用 $parent,因为这是一个模板,并且通过 ng-include 在主表单上):

<label for="frontAxles">Front Axle: </label>
<input ng-model="$parent.frontAxleType" type="hidden" value="Front">
<select ng-model="$parent.selectedFrontAxle" ng-options="axleType.Description for axleType in axleTypes">
    <option value="" selected>Select Axle Type ..</option>  
</select>

3.主窗体通过卡车控制器插入一辆新卡车,因此在卡车控制器中:

  a. I instantiate an instance of the AxleTypes collection so the form is populates the select w/axle types.
  b. I instantiate an instance of AxleType to pass the selected data from the form.
  c. I pass the respective ng-models on the form to the AxleType variable.
  d. I add that AxleType variable to the Truck's AxleTypes collection.

  a: if ($scope.axleTypes == undefined || !($scope.axleTypes.length > 0)) 
       { $scope.axleTypes = API.GetAxleTypes(); }

  b: $scope.axleType = {};

  c: var frontAxle = $scope.axleType;
         frontAxle.Description = $scope.selectedFrontAxle;
         frontAxle.Type = $scope.frontAxleType;

  d: newTruck.AxleTypes = [
        angular.copy(frontAxle)
    ];

调试时这是最终结果:

在此处输入图像描述

为了尽可能地简短,我没有说明上面选择的第 2 轴类型。但是正如您所看到的,服务器选择了 2 个轴类型,但是每个 [Type & Description] 的两个属性都为空。有没有人有什么建议?

在 console.log 中,这两个值都是“未定义的”。

一个有趣的观察:

当我对 TruckCtrl 中的值进行硬编码时,一切正常:

    frontAxle.Description = 'Some Front Value';
    frontAxle.Type = 'Front';
    rearAxle.Description = 'Some Rear Value';
    rearAxle.Type = 'Rear';

    newTruck.AxleTypes = [
        angular.copy(frontAxle),
        angular.copy(rearAxle)
    ];

这会导致有人认为问题出在轴模板上的 ng-model 上。但是,当我在服务器类 AxleType 中只有一个属性,即描述,而不是类型时,仅通过以下方式添加了选择的描述:

    newTruck.AxleTypes = [
        angular.copy($scope.selectedFrontAxle),
        angular.copy($scope.selectedRearAxle)
    ];

传递的值。非常混乱。

4

1 回答 1

1

解决了 !!!

我有很多话想对 40 位在没有输入的情况下仔细阅读这个问题的奇怪眼球说,Stewie,好吧,我们知道 Stewie 是什么。但我不会。相反,我会为有同样问题的人提供帮助。

好的,进入解决方案。

问题 #1:Angular 不接受 html 输入中的默认值。

我很困惑为什么我有这样的输入:

<input ng-model="$parent.selectedRearType" type="hidden" value="Front">

然而 angular 说它没有价值。

问题 1 的解决方案:

您需要在控制器中初始化以下内容:

    $scope.selectedFrontType = 'Front';
    $scope.selectedRearType = 'Rear';

问题 #2:如何在集合中传递多个属性的值?

尽管这种情况是多么真实,但令人不安的是,关于此事的文档为零。

问题 #2 的解决方案:

在我的 html 中,我有这个选择语句:

  <select ng-model="$parent.selectedFrontAxle" ng-options="axleType.Description for axleType in axleTypes">

我错误地认为这个 ng-model严格来说是AxleType类的 Description 属性(参见上面的类模型)。这是一个巨大的错误,事实并非如此。那个 ng-model 不是类的 Description 属性,而是整个类本身。因此,在检查该 select 的 ng-model 时,请意识到它是整个 AxleType 类,即使只提供了 Description 属性。所以 ng-model 给我的是用户做出选择后我的控制器中的返回值:

AxleType class => Description = "无论选择什么人", Type=""

在这种情况下,我需要填写 angular 没有的空白,即在这种情况下,Type 属性。

这是整个解决方案:

    // beginning of controller when it initializes
    $scope.selectedFrontType = 'Front';
    $scope.selectedRearType = 'Rear';    

   // $scope.axleType = {}; -> NOT NEEDED

    // in the save method    
    // axles
    var frontAxle = $scope.selectedFrontAxle;
    frontAxle.Type = $scope.selectedFrontType;

    var rearAxle = $scope.selectedRearAxle;
    rearAxle.Type = $scope.selectedRearType;

    newTruck.AxleTypes = [
        angular.copy(frontAxle),
        angular.copy(rearAxle)
    ];

在此处输入图像描述

我希望我帮助了某人!

于 2013-03-14T22:48:49.077 回答