Некоторые проверки текстовых полей на стороне клиента исчезают и заменяются jQuery17205969379292482464=55.

У меня странная проблема с моим опубликованным решением asp.net MVC4. До сих пор с валидацией все идет хорошо. Тогда что-то пойдет не так только на моем опубликованном сервере IISTEST (локально через VS2012 проблем нет, даже «запустить без отладки», поэтому пакеты активны).

Что не так? Я заметил 2 или 3 вещи, но давайте поговорим о первой.

У меня есть некоторая проверка на стороне клиента для разных текстовых полей, параметров... Один из них больше не управляет проверкой на моем опубликованном сервере. Чтобы проверить это, я перехожу на страницу, нажимаю F12, нажимаю на текстовое поле и копирую html.

Вот локальная версия (проходит через VS2012):

<input name="EmergencyReason" class="input-validation-error" id="EmergencyReason" type="text" data-val="true" hideRow="true" data-val-requiredifloadingtoday="Le champ {0} n'est pas valide." value=""/>

Как видите, есть некоторая проверка.

Вот опубликованная версия:

<input name="EmergencyReason" id="EmergencyReason" type="text" jQuery17205969379292482464="55" hiderow="true"/>

Больше никакой проверки. Но некоторые из моих текстовых полей имеют проверку, некоторые нет.

Я замечал, что каждый раз, когда у меня есть текстовое поле, проверка которого больше не работает, у меня есть это: jQuery17205969379292482464 вместо ошибки проверки ввода... У меня есть это решение для скрипта и css. Может быть, это поможет вам понять.

Есть идеи? Я занимаюсь этой проблемой с полдня, поэтому любая помощь очень ценится.

Спасибо.

ОБНОВИТЬ ------------------------

После выполнения некоторых тестов локально и манипулирования F12 / «режим браузера» >> IE7 я обнаружил, что jQuery17205969379292482464 появляется локально и на сервере, поэтому это не связано с моей проблемой. Одно можно сказать наверняка: некоторые базовые проверки клиента, такие как атрибуты [Required], работают. Проверка тех, кто больше не работает, выглядит следующим образом:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class RequiredIfLoadingTodayAttribute : ValidationAttribute, IClientValidatable
{        
    public RequiredIfLoadingTodayAttribute() { }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        ///////////////
        // IsLoading //
        ///////////////
        var propertyIsLoadingInfo = validationContext.ObjectType.GetProperty("IsLoading");
        var propertyIsLoadingValue = propertyIsLoadingInfo.GetValue(validationContext.ObjectInstance, null);

        //////////
        // Date //
        //////////
        var propertyDateInfo = validationContext.ObjectType.GetProperty("Date");
        var propertyDateValue = propertyDateInfo.GetValue(validationContext.ObjectInstance, null);

        ////////////////
        // Validation //
        ////////////////
        Boolean isLoading = Convert.ToBoolean(propertyIsLoadingValue);
        DateTime dateLoading = Convert.ToDateTime(propertyDateValue);
        DateTime dateToday = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));

        // Validation uniquement pour le chargement
        if (isLoading)
        {
            // Si la date de chargement = date du jour et on a pas de raison indiquée -> déclencher une erreur de validation
            if ((DateTime.Compare(dateLoading, dateToday)==0) && (value==null))
            {
                return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
            }
        }
        return ValidationResult.Success;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule {
            ErrorMessage = this.ErrorMessageString,
            ValidationType = "requiredifloadingtoday"
        };
        yield return rule;
    }
}

И связанный файл js:

$.validator.unobtrusive.adapters.add(
    'requiredifloadingtoday', '', function (options) {
        options.rules['requiredifloadingtoday'] = options.params;
        options.message['requiredifloadingtoday'] = options.message;
    });
$.validator.addMethod('requiredifloadingtoday', function (value, element, params) {
    // Cette validation côté client n'est utilisée que sur le tab chargement
    // pour s'assurer qu'une raison est indiquée dans le cas ou la date
    // de chargement est le jour même.
    return (($Date.val() == DateToday) && (value != ''))
}, '');

И модель представления:

    [RequiredIfLoadingToday()]
    public string EmergencyReason { get; set; }

И вид:

<script type="text/javascript" src="@Url.Content("~/Scripts/Loading/When.js")"></script>

<span class="editor-field">   
     @Html.TextBoxFor(m => m.EmergencyReason, Model.Date != DateTime.Today ? new {hideRow="true"} : null)
 </span> 
 ...

Я не знаю, в чем проблема с этой немного «более продвинутой» проверкой. Проблема с Аяксом?


person Bronzato    schedule 10.02.2013    source источник
comment
Вы запускали свое приложение в режиме выпуска локально, чтобы проверить, сможете ли вы воспроизвести это? Кажется, вы упомянули в своем вопросе, что пытались запустить его без отладки, но это вовсе не означает, что пакеты будут объединять и минимизировать ваши файлы. Это произойдет, только если вы запустите в режиме Release локально.   -  person Darin Dimitrov    schedule 10.02.2013
comment
Я уже пытаюсь работать с 'debug=false' на моей машине разработки, поэтому пакеты активируются, а проблема все еще существует. Я обновил свой вопрос, чтобы показать больше информации. Спасибо, в любом случае.   -  person Bronzato    schedule 10.02.2013
comment
Сравните ваши web.configs. Проверьте правильность путей для файла js.   -  person leppie    schedule 10.02.2013
comment
Что касается jQuery17205969379292482464. Это uuid, который jquery добавляет к элементам DOM, когда ему нужно с ними взаимодействовать. Вот ответ, который объясняет детали stackoverflow.com/a/7150719/1314859. Сомневаюсь, что это источник вашей проблемы.   -  person Alexander Manekovskiy    schedule 10.02.2013
comment
@leppie: web.config в порядке. js достигается из представления (выполняется какой-то другой скрипт).   -  person Bronzato    schedule 10.02.2013
comment
@ Александр: вы правы: наконец, я тоже думаю, что это не связано с моей проблемой.   -  person Bronzato    schedule 10.02.2013
comment
@Дарин: может быть, я не совсем ясно ответил на твой комментарий выше. после попытки запуска локально с пакетами «debug = false» будут объединены и минимизированы мои файлы И никаких проблем на локальном компьютере. Проблемы возникают только на сервере IISTEST.   -  person Bronzato    schedule 10.02.2013