У меня представление 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), и все работает нормально. Но если я загружаю тот же файл из локального IE8 сервера 2008 в http://localhost:87/test.htm (IIS 7), то я получаю проблему. Каким-то образом это заставляет меня задуматься, что-то не так в настройке 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.