我有一个MVC3视图,本地调试非常好,在我部署到服务器之后,我发现根本没有触发不显眼的验证。
我将输出保存到静态HTML文件中,并删除所有不必要的代码,并留下以下部分
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
Dummy
</title>
<link type="text/css" href="/Content/site.css" rel="stylesheet" />
<script type="text/javascript" src="/Scripts/jquery-1.6.4.js"></script>
<script type="text/javascript" src="/Scripts/jquery.validate.js"></script>
<script type="text/javascript" src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript" src="/Scripts/jquery.unobtrusive-ajax.js"></script>
</head>
<body>
<form action="/Test/Dummy" data-ajax="true" data-ajax-complete="MyDummy.OnComplete" data-ajax-method="Post" id="form0" method="post">
<select data-val="true" data-val-number="The field SourceId must be a number." data-val-required="SourceId required." id="SourceId" name="SourceId"></select>
<span class="field-validation-valid" data-valmsg-for="SourceId" data-valmsg-replace="true"></span><br />
<select data-val="true" data-val-number="The field DestinationId must be a number." data-val-required="DestinationId required." id="DestinationId" name="DestinationId"></select>
<span class="field-validation-valid" data-valmsg-for="DestinationId" data-valmsg-replace="true"></span><br />
<input type="submit" value=" Submit " class="ButtonStyle" />
</form>
<script type="text/javascript">
var MyDummy = {
OnComplete: function (content) {
alert(content.responseText);
}
}
</script>
</body>
</html>
我相信我已经包含了正确的JavaScript文件,所有呈现的Html看起来都很好。当我点击提交按钮时,我希望验证消息,但是会触发oncomplete事件。
我在这里很迷失,有人知道出了什么问题吗?
编辑1 ,我将相同的静态Html文件复制到我本地项目的文件夹,并通过http://localhost:48194/test.htm(我的本地ASP.NET开发服务器)访问它,一切正常。但是,如果我在http://localhost:87/test.htm(IIS 7)从2008服务器的本地IE8加载相同的文件,那么我就遇到了问题。不知何故,它让我觉得设置IIS7会阻止或部分阻止对JavaScript文件的访问是否有问题?
编辑2 , 如果我将JS引用更改为使用CDN
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.4.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.js"></script>
然后它有效。我现在真的不知道IIS7可以做些什么来破坏本地JS文件传输。
答案 0 :(得分:1)
我听起来像IIS阻止javascript。
在IIS中,您可以set filters查看允许或拒绝的文件。也许是因为某些原因(某些人)意外阻止.js? - 另一个问题可能是文件访问。 IIS通常在不同的用户下运行,所以它可能没有访问权限吗?
但我只是在猜测。因此,最简单的测试方法是直接访问.js文件。所以只需打开http://localhost:87/Scripts/jquery-1.6.4.js
并检查IIS返回的内容。也许它会返回403错误,也许是别的东西,至少它可能有助于找出错误。
答案 1 :(得分:0)
@section Scripts
{
<script src="../Scripts/jquery.validate-vsdoc.js"></script>
<script src="../Scripts/jquery.validate.js"></script>
<script src="../Scripts/jquery.validate.min.js"></script>
<script src="../Scripts/jquery.validate.unobtrusive.js"></script>
<script src="../Scripts/jquery.validate.unobtrusive.min.js"></script>
}