ASP.NET Проверка на стороне клиента MVC 2 RC не работает
-
22-09-2019 - |
Вопрос
Кажется, я не могу получить какую-либо проверку на стороне клиента, работающую в приложении MVC 2 RC.
Моя модель имеет следующее:
public class ExampleModel
{
[Required(ErrorMessage="Test1 is required")]
[DisplayName("Test1")]
public string Test1 { get; set; }
[Required(ErrorMessage="Test2 is required")]
[DisplayName("Test2")]
public string Test2 { get; set; }
}
Мой взгляд содержит следующий код:
<% Html.EnableClientValidation(); %>
<%= Html.ValidationSummary(true, "Test was unsuccessful.") %>
<% using (Html.BeginForm()) { %>
<div>
<div class="editor-label">Test1:</div>
<div class="editor-field">
<%= Html.TextBoxFor(m => m.Test1) %>
<%= Html.ValidationMessageFor(m => m.Test1) %>
</div>
<div class="editor-label">Test2:</div>
<div class="editor-field">
<%= Html.TextBoxFor(m => m.Test2) %>
<%= Html.ValidationMessageFor(m => m.Test2) %>
</div>
<p>
<input type="submit" value="Test" />
</p>
</div>
Я оставляю оба поля пустыми и нажимаю кнопку Test, и она переходит прямо к обработчику post контроллера без проверки на стороне клиента.Я не уверен, чего мне не хватает.
У меня есть следующий javascript, также включенный в представление (не уверен, нужно ли мне все это):
<link href="../../Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<link href="../../Scripts/jquery.validate.min.js" type="text/javascript" />
<link href="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript" />
Есть идеи, что я делаю не так.Я чувствую, что мне не хватает чего-то простого, а документация для MVC 2 скудна.
Редактировать: Я добавил ссылку:
<link href="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />
И я включил файл в свой проект, который мне пришлось загрузить по одной из ссылок в ответах.Все еще совсем не работает.Есть еще какие-нибудь идеи?
Редактировать: Я использую Visual Studio 2008 с MVC 2 RC (не бета-версия) и я ищу любые загружаемые или опубликованные примеры проверки на стороне клиента, работающие с выпуском RC.
Решение 2
Хорошо, я с этим разобрался...и это на 100% моя вина.Хотя пара постов содержала некоторую информацию, которая мне тоже была нужна.
Главной проблемой, которую, к моему удивлению, никто не заметил, был мой HTML-код для включения скриптов...посмотрите на мой пост и посмотрите, видите ли вы проблему.
Я использовал <link href=...
тег вместо правильного <script src=...
пометка.Полностью моя вина, так как я быстро вырезал и вставил CSS-ссылку, не задумываясь, и просто изменил тип и файл.Да!!!
В любом случае требуются правильные ссылки:
<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
Тогда все работает.Вам определенно нужно включить файл 'MicrosoftMvcJQueryValidation.js' из проекта futures, поэтому я проголосовал против всех сообщений, в которых упоминалось это.
Из коробки, хотя этот файл НЕ включен.Если вы не беспокоитесь об использовании jQuery, то вы можете просто использовать следующие includes для использования реализации Microsoft, которая будет работать с RC "из коробки":
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
Я надеюсь, что смогу избавить хотя бы одного человека от горя...Я до сих пор не могу поверить, как я мог испортить включение и не замечать этого оооочень долго.
Еще раз спасибо за всю вашу помощь.
Другие советы
Когда вы обновляете проект с бета-версии MVC 2, используйте: /src/MvcFutures/MicrosoftMvcJQueryValidation.js
из пакета исходного кода MVC 2 RC (Ссылка).Более старая бета-версия некорректно работает с jquery.validation в RC.Необходимыми файлами javascript являются:
<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<script src="/Scripts/jquery.validate.min-vsdoc.js" type="text/javascript" />
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />
Правильная версия MicrosoftMvcJQueryValidation.js содержит это $(документ).готово() функция:
// need to wait for the document to signal that it is ready
$(document).ready(function() {
var allFormOptions = window.mvcClientValidationMetadata;
if (allFormOptions) {
while (allFormOptions.length > 0) {
var thisFormOptions = allFormOptions.pop();
__MVC_EnableClientValidation(thisFormOptions);
}
}
});
в конце файла (в RC-версии).
Вы должны включить MicrosoftMvcJQueryValidation.js файл :
<link href="MicrosoftMvcJQueryValidation.js" type="text/javascript" />
Проверьте это: Где правильная версия MicrosoftMvcJQueryValidation.js для MVC 2 beta 2?
Далее просто положите Html.EnableClientValidation();
где-то на странице просмотра.IT должен находиться перед первой формой, которую вы хотите проверить на стороне клиента.Я предпочитаю Сайт.Мастер Страница.
Работаю над ASP.NET MVC 2 RC.
Вы уверены, что включили правильные JS-файлы?Потому что в Сообщение Фила Хаака это имеет MicrosoftMvcJQueryValidation.js
прикрепленный вместо MicrosoftMvcValidation.js
.
Он также устанавливает ClientValidationFunction
свойство в представлении :
<% ViewContext.FormContext.ClientValidationFunction
= "EnableClientValidation"; %>
Хотя это был не RC, а бета-версия.
Система проверки по умолчанию (и поддерживается только Корпорацией Майкрософт) в версии-кандидате MVC 2 ASP.NET Не использует jQuery Validate.Вместо этого он использует новую систему проверки, которая полностью существует в MicrosoftMvcValidation.js (хотя вам также необходимо включить MicrosoftAjax.js).
Если вы хотите использовать библиотеку jQuery Validate, она включена как часть ASP.NET Проект MVC Futures (доступен здесь), который является отдельной загрузкой и имеет свой собственный файл сценария адаптера.
Кроме того, что касается Html.ValidationSummary()
помощник, я считаю, что это необходимо включить в форму, если вы хотите, чтобы у нее была новая функциональность на стороне клиента.Он все равно будет работать, если он находится за пределами формы, но он будет работать только на стороне сервера.