ValidationMessage всегда показывает / Сводка не отображается - ASP.NET MVC 3 - PullRequest
0 голосов
/ 01 февраля 2011

Проблема:

У меня есть Ajax.BeginForm, который по сути состоит из двух выпадающих списков и кнопки отправки. Я хочу, чтобы валидация MVC 3 включилась, если пользователь не выбрал опцию из обоих выпадающих списков.

Этого не происходит. Вместо этого открывается страница с ValidationMessages, отображаемыми рядом с ddls, и, если есть отправка с неверными данными, сводка проверки не отображается.

Код:

using (Ajax.BeginForm(MVC.Admin.TutorEditor.AddTutorCourse(Model.TutorName, 0, 0),
                        new AjaxOptions
                        {
                            UpdateTargetId = "TutorCourses",
                            OnBegin = "isValidPleaseWait",
                            LoadingElementId = "PleaseWait"
                        },
                        new { name = "AddTutorCourseForm", id = "AddTutorCourseForm" }))
        {
            Html.ValidationSummary("Sorry, there was an error. Please check below and try again:");                
            <fieldset>
                <legend>Add Course</legend>
                <div class="editor-label">
                    @Html.LabelFor(model => model.AllCourses)
                    @Html.DropDownList("CourseId", Model.AllCourses, "-- Choose Course --", new { style = "width:180px;" })
                    @Html.ValidationMessage("CourseId", "*: Required")
                </div>
                <div class="editor-label">
                    @Html.LabelFor(model => model.TutorRoles)
                    @Html.DropDownList("TutorRoleId", Model.TutorRoles, "-- Choose Role --", new { style = "width:180px;" })
                    @Html.ValidationMessage("TutorRoleId", "*: Required")
                </div>
                <input type="submit" value="Add Course" />
            </fieldset>
        }

Действие AddTutorCourse:

[HttpPost]
        public virtual ActionResult AddTutorCourse(string username, int CourseId, int TutorRoleId)
        {
            service.SetTutor(username);
            if (CourseId == 0) ModelState.AddModelError("CourseId", "You did not choose a Course");
            if (TutorRoleId == 0) ModelState.AddModelError("TutorRoleId", "You did not choose a Tutor Role");
            if(ModelState.IsValid)
            {
                service.AddTutorToCourse(CourseId, TutorRoleId);
            }
            if (Request.IsAjaxRequest())
            {
                return PartialView(Views.TutorCoursesPartial, service.ViewModel);
            }
            else
            {
                return View(Views.Details, service.ViewModel);
            }            
        }

Включены файлы сценариев:

    <script id="script0" src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script id="script1" src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script id="script2" src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
    <script id="script3" src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script id="script4" src="/jQueryUI/jquery-ui-1.8.2.custom.min.js" type="text/javascript"></script>
    <script id="script5" src="/jQueryPlugins/Cookies/jquery.cookie.js" type="text/javascript"></script>
    <script type="text/javascript" src="/Scripts/jquery.unobtrusive-ajax.min.js"></script>

Что я делаю не так!?

Ответы [ 3 ]

11 голосов
/ 04 апреля 2011

У меня тоже была эта проблема, и я наконец понял, что вам нужно добавить стиль CSS в класс валидации.Тогда он не будет отображаться при первом открытии страницы:

.field-validation-valid { display: none; }
.validation-summary-valid {  display: none; }
3 голосов
/ 01 февраля 2011

Включаете ли вы необходимые файлы JavaScript? Вам нужно:

  • JQuery-1.4.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js (при использовании ненавязчивой проверки)
1 голос
/ 24 апреля 2013

Если вам не нужна вся библиотека проверки jquery, тогда ответ @ diana - хороший вариант.В качестве альтернативы, если вам все равно требуется проверка сервера, возможно, было бы лучше отключить проверку клиента, включив это в ваше представление:

@{ Html.EnableClientValidation(false); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...