2015-07-10 5 views
6

Проверка правильной работы на локальном поле, dev-сайте, но это не происходит на промежуточных и производственных сайтах. Проверка на стороне клиента и на стороне сервера не происходит. Оба этапа и производства сбалансированы по нагрузке, но используют липкое соединение из-за некоторых других функциональных требований.DataAnnotations - Проверка не выполняется

Я проверил папку bin во всех средах, и я вижу следующие две библиотеки DLL.

DataAnnotationsExtensions.ClientValidation.dll 
DataAnnotationsExtensions.dll 

На стороне сервера следующее должно завершиться неудачно, но этого не произойдет.

!TryValidateModel(model) || !ModelState.IsValid 

Этот сайт использует проверку подлинности Windows.

Web.config

<appSettings file="Configs\AppSettings_LocalHost.config"> 
     <add key="webpages:Version" value="3.0.0.0" /> 
     <add key="webpages:Enabled" value="false" /> 
     <add key="ClientValidationEnabled" value="true" /> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 

Для целей тестирования, я не использую расслоение в это время. Для пучков, я даже проверил его со следующим

<location path="~/Content"> 
     <system.web> 
      <authorization> 
       <allow users ="*" /> 
      </authorization> 
     </system.web> 
    </location> 
    <location path="~/bundles"> 
     <system.web> 
      <authorization> 
       <allow users ="*" /> 
      </authorization> 
     </system.web> 
    </location> 
    <location path="~/Scripts"> 
     <system.web> 
      <authorization> 
       <allow users ="*" /> 
      </authorization> 
     </system.web> 
    </location> 

И у меня есть следующие файлы JS ссылка, а также

<script src="/NetSite/Scripts/Core/jquery.validate.min.js?v=1.12" type="text/javascript"></script> 
<script src="/NetSite/Scripts/Core/jquery.validate.unobtrusive.min.js?v=1.12" type="text/javascript"></script> 
<script src="/NetSite/Scripts/Custom/Validators.js?v=1.12" type="text/javascript"></script> 

приложение является MVC 5 и все было добавлено с помощью пакета NuGet. У меня нет MVC, установленного на сервере. У меня есть другое приложение MVC 5 на этих серверах, и проверка выполняется просто отлично.

И вот тег формы, второе рабочее приложение использует те же теги формы.

using (Html.BeginForm(ActionNames.Index, ControllerNames.Rankings, new { Area = AreaNames.MemberToolsReports }, FormMethod.Post, new { id = "RankingsSearchForm" })) 

На старых промежуточных и производственных площадках валидация работала, но затем мы установили на нее MVC 3.

Update - контроллер Код

using System; 
     using System.Collections.Generic; 
     using System.Linq; 
     using System.Web; 
     using System.Web.Mvc; 
     using Project.BusinessEntities; 
     using Project.Common.Constants; 
     using Project.MvcBase; 
     using Project.Resources; 
     using Project.ServiceInterfaces; 
     using Project.ViewModels; 
     using Project.ViewModels.MemberToolReports; 
     using Microsoft.Practices.Unity; 
     using Project.Helpers.Helpers; 
     using Project.Helpers.IO; 

     namespace Project.Site.Areas.MemberToolsReports.Controllers 
     { 
      public class RankingsController : BaseController 
      { 
       #region PROPERTIES 

       [Dependency] 
       public IGeographyService GeographyServiceInstance { get; set; } 

       [Dependency] 
       public IRankingsService RankingsServiceInstance { get; set; } 

       [Dependency] 
       public IUtilityService UtilityServiceInstance { get; set; } 

       #endregion 

       #region ACTIONS 

       public ActionResult Index() 
       { 
        var states = getting states here 
        var key = String.Empty; 

        var search = new RankingSearch { Key = key }; 

        var model = new RankingSearchViewModel { Search = search, StatesList = states }; 

        return View(model); 
       } 

       [HttpPost] 
       [ValidateAntiForgeryToken] 
       public ActionResult Index(RankingSearchViewModel model) 
       { 
        var errorModel = new ContentShowError { IsError = true }; 
        var resultModel = new RankingsSearchResultsViewModel(); 

        try 
        { 
        //TODO: remove extra code once data annotations issue is fixed on staging and prod 
         if (!Request.IsAjaxRequest()) 
         { 
          errorModel.Message = base.GetDisplayMessage(ProcessingMessagesEnum.ErrorServicingRequest); 
         } 
         else if (!TryValidateModel(model) || !ModelState.IsValid) 
         { 
          errorModel.Message = base.GetDisplayMessage(ProcessingMessagesEnum.ErrorProcessingRequest); 
         } 
         else if (String.IsNullOrWhiteSpace(model.Search.Key) && 
           String.IsNullOrWhiteSpace(model.Search.Institution) && 
           String.IsNullOrWhiteSpace(model.Search.State)) 
         { 
          errorModel.Message = base.GetDisplayMessage(ProcessingMessagesEnum.NoCriteriaSpecified); 
         } 
         else 
         { 
          //default - debug code 
          errorModel.Message = base.GetDisplayMessage(ProcessingMessagesEnum.ErrorNoDataFound); 

          var results = RankingsServiceInstance.SearchRanking(model.Search); 
          if (results != null && results.Count > 0) 
          { 
           errorModel.IsError = false; 
           errorModel.Message = String.Empty; 

           //update result model 
           resultModel.Rankings = results; 

          } 
         } 
        } 
        catch (Exception ex) 
        { 
         errorModel.Message = base.GetDisplayMessage(ProcessingMessagesEnum.ErrorProcessingRequest); 
         base.LogException(ex); 
        } 
        ActionResult result = null; 
        result = errorModel.IsError ? PartialView(ViewNames.ErrorControl, errorModel) : PartialView(ViewNames.SearchResultsControl, resultModel); 

        return result; 
       } 

       #endregion 

      } 
     } 

Update 2 - HTML разница

Похоже, атрибуты проверки даже не делает его в HTML, как если сайт не знаю даже что мы используем проверку. Прямо сейчас, оба, dev и промежуточные сайты имеют одинаковый код.

Балетмейстер сайт

<input autofocus="autofocus" class="clearSearchFields" id="Search_Key" maxlength="6" name="Search.Key" size="6" type="text" value="" /><br /> 

Работа DEV сайт

<input autofocus="autofocus" class="clearSearchFields" data-val="true" data-val-length="Key must be 6 characters long" data-val-length-max="6" data-val-length-min="6" data-val-regex="Only alphanumeric (A-Z a-z 0-9) values are allowed" data-val-regex-pattern="[A-Za-z0-9]*" id="Search_Key" maxlength="6" name="Search.Key" size="6" type="text" value="" /><br /> 
           <span class="field-validation-valid" data-valmsg-for="Search.Key" data-valmsg-replace="true"></span> 
+0

Может ли показать контроллер – Sachu

+0

любые ошибки в консоли? И еще один глупый вопрос: добавили ли вы jquery на свою страницу? –

+0

показать контроллер – ediblecode

ответ

0

Поскольку некоторые плакаты не читают полностью вопрос и комментарии и пытаются ответить, я перехожу к двум последним комментариям из темы вопроса в качестве ответа. Моя проблема исправлена.

Я переместил web.config с моей локальной машины на стадию, а prod и валидация начали работать. Я проверил старый web.config и эту новую рабочую папку web.config, и нет никаких различий. Несмотря на то, что он работает, я доволен, но теперь я запутался в одно и то же время.

Похоже, что временный файл ASP.NET был проблемой в этом случае. Когда я обновил файл web.config вручную, файл temp также был обновлен, что устранило проблему для меня.

0

Поскольку вы были еще 5 MVC приложение на этой машине то, что работает хорошо, и у вас нет MVC установлено, казалось бы, что что-то не развертывается правильно. Скорее всего, в пакете MVC есть какая-то сборка, которую у вас нет.

Есть ли причина, по которой вы не можете установить MVC на сервер? Для этого имеются автономные пакеты. Это должно добавить все, что вам нужно.

Если вы не можете установить MVC, я бы посмотрел на корзину вашего рабочего MVC 5 приложения. Кажется, у него больше.Чистые сборки, чем ваше новое приложение? Если это так, то кто-то, вероятно, включил в него все недостающие сборки MVC. Вы можете попробовать скопировать все сборки из рабочего приложения mvc, просто убедитесь, что вы не переопределяете. Это должно показать вам любую сборку, которую вам не хватает.

+0

Я не могу установить MVC на серверы, каждая вещь должна быть в корзине. MVC также не установлен в блоке dev, и он работает там. Я еще раз посмотрю папку с bin и посмотрю, найду ли я что-нибудь. –

+0

Любая удача, сравнивающая оба бункера? –

+0

Нет. Я поставил обновление №2 в теме вопроса. Когда я смотрю на html, я не вижу html, связанный с проверкой. Оба dev и промежуточных сайтов имеют одинаковую базу кода. –