2011-12-30 4 views
0

У меня есть вид 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 выглядит хорошо для меня. Когда я нажимаю кнопку отправки, я ожидаю подтверждение валидации, но вместо этого запускается незавершенное событие.

Я очень потерялся здесь, никто не знает, что не так?

Edit 1, я скопировал же статический файл Html в папку моего локального проекта и доступ к нему через http://localhost:48194/test.htm (мой локальный сервер развития ASP.NET) и все работает отлично. Но если я загружаю тот же файл из локального IE8 сервера 2008 на http://localhost:87/test.htm (IIS 7), то у меня возникла проблема. Почему-то это заставляет меня думать, что есть что-то неправильное в настройке IIS7, которая блокирует или частично блокирует доступ к файлам JavaScript правильно?

Edit 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

Создал jsfiddle для html, и он отлично работает. http://jsfiddle.net/epignosisx/jcPNu/. Вы проверили вкладку сети в Firebug для загрузки ресурсов? – epignosisx

+0

Я использовал Filddler и видел, что следующие файлы загружаются последовательно: 304 - HTTP - /test.htm; 304 - HTTP - /Content/site.css; 304 - HTTP - /Scripts/jquery.validate.js; 304 - HTTP - /Scripts/jquery-1.6.4.min.js; 304 - HTTP - /Scripts/jquery.validate.unobtrusive.js; 304 - HTTP - /Scripts/jquery.unobtrusive-ajax.js; Не думайте, что я пропустил какой-либо файл. – hardywang

+0

Не могли бы вы указать URL-адрес производственного сервера? – epignosisx

ответ

1

Я действительно напоминаю, что IIS блокирует javascript.

В IIS вы можете set filters, для которого разрешены или запрещены файлы. Может быть, почему-то кто-то (случайно) заблокировал .js? - Другой проблемой может быть доступ к файлам. IIS обычно работает под другим пользователем, поэтому, возможно, у него нет доступа?

Но я как бы догадываюсь. Таким образом, самый простой способ проверить это - просто посетить файл .js напрямую. Поэтому просто откройте свой http://localhost:87/Scripts/jquery-1.6.4.js и проверьте, что возвращает IIS. Возможно, он возвращает ошибку 403, может быть, что-то еще, по крайней мере, это, вероятно, поможет выяснить, что не так.

+0

Да, я попробую позже. Но пока я упоминал в одном из своих предыдущих комментариев, я использовал Fiddler2 для отслеживания действий HTTP, все они показывают код 304. Но я буду загружать их в свой браузер снова один за другим. – hardywang

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> 
} 
Смежные вопросы