Я хочу, а также Клиентская Проверка как Серверная Проверка. Я понял это как следующее:
Модель: (Модель имеет DataModel (dbml), который содержит Тестовый класс),
namespace MyProject.TestProject
{
[MetadataType(typeof(TestMetaData))]
public partial class Test
{
}
public class TestMetaData
{
[Required(ErrorMessage="Please enter a name.")]
[StringLength(50)]
public string Name { get; set; }
}
}
Контроллер является ничем специальным.
Представление:
<% Html.EnableClientValidation(); %>
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post,
new AjaxOptions {}, new { enctype = "multipart/form-data" }))
{%>
<%= Html.AntiForgeryToken()%>
<fieldset>
<legend>Widget Omschrijving</legend>
<div>
<%= Html.LabelFor(Model => Model.Name) %>
<%= Html.TextBoxFor(Model => Model.Name) %>
<%= Html.ValidationMessageFor(Model => Model.Name) %>
</div>
</fieldset>
<div>
<input type="submit" value="Save" />
</div>
<% } %>
Для создания этой всей работы, я добавил также ссылки на js файлы:
<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>
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
В конечном счете это должно работать, но это не работает 100%: Это делает проверяет без обновления страницы после нажатия кнопки. Это также делает "половину" Клиентской Проверки. Только, когда Вы вводите некоторый текст в текстовое поле и затем возвращаете напечатанный текст. Клиентская Проверка появляется. Но когда я пробую это путем ответвления между средствами управления нет никакой Клиентской Проверки.
Я пропускаю некоторую ссылку или что-то? (Я использую Asp. Сетевой MVC 2 RTM)
Измените порядок загрузки javascript...
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<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>
У меня была точно такая же проблема, и это помогло мне ее решить...
Я думал, что мне тоже чего-то не хватает, но я знаю, что подключаемый модуль проверки jQuery не реагирует на mouseEnter / mouseLeave. Согласно документации для этого подключаемого модуля (на странице подключаемого модуля - найдите раздел с пометкой «Несколько вещей, на которые следует обратить внимание при игре с демонстрацией»):
Перед тем, как поле будет помечено как недействительный, проверка выполняется лениво: перед отправкой формы в первый раз пользователь может перемещаться по полям, не получая раздражающих сообщений - он не получит ошибку, пока не получит возможность ввести правильное значение
Я полагаю это то же самое правило с проверкой на стороне клиента MVC 2. Я не могу быть в этом уверен, потому что в документации ничего не сказано, кроме «это работает на моей машине» :).
Я выбрал маршрут проверки jQuery, который поддерживается в MVC Futures (обратите внимание, что документации для этого не существует). Чтобы использовать его, вам просто нужно заменить теги сценария для файлов MicrosoftAjax.js, MicrosoftMvcAjax.js и MicrosoftMvcValidation.js этими двумя тегами:
<script src="/js/jquery.validate.js" type="text/javascript"></script>
<script src="/js/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
заменив путь на ваш.
Я также обнаружил, что необходимо обновить jquery.validate.js до последней версии со страницы разработчика, потому что здесь мы используем более позднюю версию jQuery (1.4).
Надеюсь, что это поможет.
хм..., уже поздно отвечать, но попробуйте вот это:
<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script>