我在尝试使用不显眼的jquery验证来处理通过AJAX调用动态加载的局部视图时遇到问题.
我花了几天时间试图让这段代码运转起来没有运气.
这是视图:
@model MvcApplication2.Models.test
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<div id="res"></div>
<input id="submit" type="submit" value="submit" />
}
Run Code Online (Sandbox Code Playgroud)
部分视图:
@model MvcApplication2.Models.test
@Html.TextAreaFor(m => m.MyProperty);
@Html.ValidationMessageFor(m => m.MyProperty);
<script type="text/javascript" >
$.validator.unobtrusive.parse(document);
</script>
Run Code Online (Sandbox Code Playgroud)
该模型:
public class test
{
[Required(ErrorMessage= "required field")]
public int MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制者:
public ActionResult GetView()
{
return PartialView("Test");
}
Run Code Online (Sandbox Code Playgroud)
最后,javascript:
$(doument).ready(function () {
$.ajax({
url: '/test/getview',
success: function (res) {
$("#res").html(res);
$.validator.unobtrusive.parse($("#res"));
}
});
$("#submit").click(function () {
if ($("form").valid()) {
alert('valid');
return true;
} …Run Code Online (Sandbox Code Playgroud) 在我的web.config中,我想为access-control-allow-origin指令指定多个域.我不想用*.我试过这个语法:
<add name="Access-Control-Allow-Origin" value="http://localhost:1506, http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
这个
<add name="Access-Control-Allow-Origin" value="http://localhost:1506 http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
这个
<add name="Access-Control-Allow-Origin" value="http://localhost:1506; http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
还有这个
<add name="Access-Control-Allow-Origin" value="http://localhost:1506" />
<add name="Access-Control-Allow-Origin" value="http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用.什么是正确的语法?
当我加载视图时,我想在其关联的控制器中运行一些初始化代码.
为此,我在视图的主要元素上使用了ng-init指令:
<div ng-init="init()">
blah
</div>
Run Code Online (Sandbox Code Playgroud)
并在控制器中:
$scope.init = function () {
if ($routeParams.Id) {
//get an existing object
});
} else {
//create a new object
}
$scope.isSaving = false;
}
Run Code Online (Sandbox Code Playgroud)
第一个问题:这是正确的方法吗?
接下来,我对发生的事件序列有疑问.在视图中,我有一个"保存"按钮,它使用ng-disabled指令:
<button ng-click="save()" ng-disabled="isClean()">Save</button>
Run Code Online (Sandbox Code Playgroud)
该isClean()函数在控制器中定义:
$scope.isClean = function () {
return $scope.hasChanges() && !$scope.isSaving;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它使用$scope.isSaving在init()函数中初始化的标志.
问题:该视图被加载的情况下,isClean函数被调用之前的init()功能,因此,该标志isSaving是undefined.我该怎么做才能防止这种情况发生?
我试过使用大写过滤器,但它不起作用.我尝试过两种方式:
<input type="text" ng-model="test" uppercase/>
Run Code Online (Sandbox Code Playgroud)
和
<input type="text" ng-model="{{test | uppercase}}"/>
Run Code Online (Sandbox Code Playgroud)
第二个触发javascript错误:
语法错误:令牌'test'是意外的,期待[:]
我希望文本在用户在文本框中键入时强制为大写.
我怎样才能做到这一点?
按照我之前的问题,我现在尝试从我的指令调用父控制器上的方法.我得到一个未定义的参数.这是我做的:
<body ng-app="myApp" ng-controller="MainCtrl">
<span>{{mandat.rum}}</span>
<span>{{mandat.surname}}</span>
<input type="text" ng-model="mandat.person.firstname" />
<my-directive mandate-person="mandat.person" updateparent="updatePerson()" >
</my-directive>
</body>
Run Code Online (Sandbox Code Playgroud)
和剧本:
var app = angular.module('myApp', []);
app.controller('MainCtrl', function ($scope) {
$scope.mandat = { name: "John", surname: "Doe", person: { id: 1408, firstname: "sam" } };
$scope.updatePerson = function(person) {
alert(person.firstname);
$scope.mandat.person = person;
}
});
app.directive('myDirective', function () {
return {
restrict: 'E',
template: "<div><span>{{mandatePerson.id}}<span><input type='text' ng-model='mandatePerson.firstname' /><button ng-click='updateparent({person: mandatePerson})'>click</button></div>",
replace: true,
scope: { mandatePerson: '=', updateparent: '&' }
}
}
) …Run Code Online (Sandbox Code Playgroud) 我见过人们从他们的代码中的任何地方这样做:
$rootScope.$broadcast('someEvent', someParameter);
Run Code Online (Sandbox Code Playgroud)
然后在一些控制器中:
$rootScope.$on('someEvent', function(event, e){ /* implementation here */ });
Run Code Online (Sandbox Code Playgroud)
现在,我想从一个指令中扩展一个事件.在rootScope级别播放它是一种好习惯吗?我想在控制器中处理这个事件.我可以使用$ scope,还是我还要听$ rootScope?
我为Number输入创建了一个模板,如果我这样做的话
@Html.EditorFor(model => model.SomeValue, "Number")
Run Code Online (Sandbox Code Playgroud)
它工作正常,使用模板.
但是这不起作用:
@Html.EditorFor(model => model.SomeValue)
Run Code Online (Sandbox Code Playgroud)
为什么我需要为基本类型指定编辑器模板的名称?
我完全是使用AngularJs的新手,尽管我已经完成了这些教程,但我脑子里仍然有许多未解决的问题.我现在主要关注的是如何将我的应用程序划分为模块?
基本上我需要构建一个应用程序,它将充当各种应用程序的门户,每个应用程序代表一个业务功能(有时几乎没有任何关系).
在本教程中,他们将展示如何使用多个视图创建一个应用程序.我需要的是一个具有多个模块的应用程序,每个模块都有自己的视图(我可能也有共享视图).
有没有人在这种结构的应用程序上工作?你能分享一下你的经历以及你如何组织事物吗?
AngularJS Seed项目(https://github.com/angular/angular-seed)很好,但它并没有真正展示如何构建复杂的应用程序.
我还有另一个缩小问题.这次是因为传递给指令控制器的$ scope服务.见下面的代码:
angular.module('person.directives').
directive("person", ['$dialog', function($dialog) {
return {
restrict: "E",
templateUrl: "person/views/person.html",
replace: true,
scope: {
myPerson: '='
},
controller: function ($scope)
{
$scope.test = 3;
}
}
}]);
Run Code Online (Sandbox Code Playgroud)
如果我注释掉控制器部分,那么它工作正常.
正如您所看到的,我已经使用了该指令的数组声明,因此即使在缩小之后,Angular也会知道$ dialog服务.但是我应该如何为控制器上的$ scope服务做呢?
我正在尝试使用Karma来测试我的js脚本.在文档中它说我应该为以下环境变量设置CHROME_BIN:
我把它设置为
%PROGRAMFILES(86)%"\谷歌\镀铬\应用\的chrome.exe
但是当我%CHROME_BIN%在DOS中键入时,它会因为被截断到C:\Program空间而失败Program Files.
我该怎么做才能解决这个问题?
angularjs ×6
asp.net ×1
cors ×1
html5 ×1
iis ×1
javascript ×1
karma-runner ×1
minify ×1
module ×1
uppercase ×1
web-config ×1