【问题标题】:AngularJs and ASP.NET MVC 5 - ng-model overriding SELECT selected OPTIONAngularJs 和 ASP.NET MVC 5 - ng-model 覆盖 SELECT selected OPTION
【发布时间】:2015-11-09 13:43:59
【问题描述】:

继续我之前的问题:

AngularJs and ASP.NET MVC 5 - ng-model overriding textbox value

我现在遇到了与 SELECT 相同的问题。

我有一个使用 ASP.NET MVC 5 构建的表单,使用 @Html.EnumDropDownListFor 用我的模型填充表单(例如,在表单导航或服务器端验证失败后)。

我现在引入了一个使用 Angular (1.4.7) 的客户端函数,这意味着 SELECT 现在用ng-model 装饰,以使 Angular 函数能够使用选定的值。

例如:

@Html.EnumDropDownListFor(m => m.MyEnum, 
                          new { @class="form-control", ng_model="obj.myEnum" })

添加ng-model 现在会在重新加载页面时覆盖从 MVC 模型中选择的选项集。

在浏览器中查看源代码表明所选选项已从 MVC 模型中正确设置,但有一个额外的选项被选中:

<select class="form-control ng-pristine ng-valid ng-touched" 
        name="MyEnum" ng-model="obj.myEnum">
    <option value="? undefined:undefined ?"></option>
    <option value="0">Please select</option>
    <option selected="selected" value="1">Option1</option>
    <option value="2">Option2</option>
</select>

我怎样才能防止这种情况,以便Option1 保持选中状态?

使用我上一个问题中的指令不起作用,因为 SELECT 没有 value 属性。

ng_init 也不适用于 SELECT

【问题讨论】:

  • 几天前刚看到一个关于此的问题。答案是使用 ng-init。看看能不能找到链接
  • 那是我的问题,我在这个问题中链接到的那个! :) 我试过 ng-init,它在 SELECT 上不起作用
  • 对此感到抱歉。我没有看到您的链接,也没有在您展示的代码中看到 ng-init,因此希望这对您有用:)
  • 1.4.7 - 我已经编辑了问题以包含它

标签: c# asp.net angularjs asp.net-mvc asp.net-mvc-5


【解决方案1】:

这是一个对您的情况有帮助的指令:

app.directive('initSelect', ['$parse', function($parse) {
  return {
    link: function(scope, element, attrs) {

      var select = element[0];

      if (!select.options.length || !attrs.ngModel) return;

      var initialValue = select.options[select.selectedIndex].value;

      $parse(attrs.ngModel).assign(scope, initialValue);
    }
  }
}]);

它将首先检索所选选项的值,在您的情况下为“1”。然后它将使用$parse 服务来设置正确的ngModel 值。

在此之后,选择应该正确呈现。

演示: http://plnkr.co/edit/2VvkGfsPW94SPSVW6iUN?p=preview

【讨论】:

  • 太棒了!谢谢,我稍微更改了一下,并将其命名为 'select',这样它就可以在我的控制器中的任何选择上工作,而无需为每个选择添加 init-select
  • 不客气 :) 是的,我也应该把它命名为 select,很好 :)
猜你喜欢
  • 1970-01-01
  • 2018-09-15
  • 2017-04-02
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多