2016-03-11 36 views
3

我采用了棱角分明的JS服务器asp.net端控件角JS和ASP服务器端控制验证

<div class="gridpage mb40" name="myForm" ng-model="myForm" ng-form 
    <div class="form-group"> 
     <label class="">Name of the Supplier:</label> 
     <asp:TextBox ID="txtSupName" CssClass="form-control" runat="server" ng-model="txtSupName" name="txtName" required></asp:TextBox> 
     <p ng-show="myForm.txtName.$invalid && !myForm.txtName.$pristine" class="help-block">Your Name is Required.</p> 
    </div> 
</div> 

问题是在运行时,当我部署我的代码,服务器端控件的名称属性更改,所以我我无法呈现错误消息的段落 是否有任何其他方式通过我可以访问控制,而不是myform.txtName。$无效??

试图与clientIDmode= Static,它使ID静态的,而是名仍然改变,

回答

2

尝试这种解决方案jsfiddle

创建指令alias,该指令存储对ngModelController的引用,该引用独立于输入(asp:TextBox)的name

var myApp = angular.module('myApp', []); 
 

 
myApp.controller('MyCtrl', function($scope, $log) { 
 

 
    }) 
 
    .directive('alias', function() { 
 
    return { 
 
     restrict: "A", 
 
     require: "ngModel", 
 
     scope: { 
 
     alias: "=" 
 
     }, 
 
     link: function(scope, elem, attr, ngModel) { 
 
     scope.alias = ngModel; 
 
     } 
 
    } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp"> 
 
    <div ng-controller="MyCtrl"> 
 
    <form name="myForm"> 
 
     <input name="txtName" ng-model="txtName" required alias="aliasName" ng-pattern="/^[0-9]+$/"> 
 
     <div ng-if="myForm.txtName.$error.required">Name is reauired by name</div> 
 
     <div ng-if="aliasName.$error.required">Name is reauired by alias</div> 
 
     <div ng-if="myForm.txtName.$error.pattern">Invalid pattern by name</div> 
 
     <div ng-if="aliasName.$error.pattern">Invalid pattern by alias</div> 
 
     <br> 
 
     <pre>myForm.txtName.$error = {{myForm.txtName.$error|json}}</pre> 
 
     <pre>aliasName.$error = {{aliasName.$error|json}}</pre> 
 
    </form> 
 
    </div> 
 
</div>