Member 10549164 Ответов: 1

Код Jquery не работает при развертывании на серверах


На странице есть разные разделы(ASP.net MVC) с теми же элементами управления(например, телефон,электронная почта). Я хочу, чтобы следующее сообщение проверки отображалось по-разному в сводке проверки(с именем раздела) и рядом с отдельными текстовыми полями(без имени раздела)

Это сообщение проверки, указанное в модели
[Required(ErrorMessage = "Chief Executive - |Name is required")] 
[Required(ErrorMessage = "Medical Director - |Name is required")] 


Код для замены символа '|' в jquery.validate.unobtrusive.js есть
function onError(error, inputElement) { // 'this' is the form element
    var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
        replaceAttrValue = container.attr("data-valmsg-replace"),
        replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;

    container.removeClass("field-validation-valid").addClass("field-validation-error");
    error.data("unobtrusiveContainer", container);

    if (replace) {
        container.empty();
        error.removeClass("input-validation-error").appendTo(container);
    }
    else {
        error.hide();
    }

    error.text(error.text().substr(error.text().indexOf("|") + 1));
}

function onErrors(event, validator) { // 'this' is the form element
    var container = $(this).find("[data-valmsg-summary=true]"),
        list = container.find("ul");

    if (list && list.length && validator.errorList.length) {
        list.empty();
        container.addClass("validation-summary-errors").removeClass("validation-summary-valid");

        $.each(validator.errorList, function () {
            $("<li />").html(this.message.replace('|', '')).appendTo(list);
        });
    }
}

Символ трубы заменяется пробелом и отображается по желанию в локальном хосте. Но когда код развертывается на серверах, я получаю одно и то же сообщение проверки (с именами разделов), отображаемое как в сводке проверки, так и рядом с текстовыми полями.

Я готов предоставить и другой код.

У меня тоже есть это в web.config
<appSettings>
    <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>


Что я уже пробовал:

код jquery не работает при развертывании на серверах

MadMyche

Что означает "не работает при развертывании"? Он что-нибудь делает? Выбрасывать ошибку? Что показывает консоль разработчика браузеров?

Member 10549164

Он не бросает никаких ошибок. Но приведенный выше код jquery для замены символа '|' на '' не работает. Сообщение "Chief Executive - |Name is required" отображается в сводке проверки, а также рядом с текстовым полем.

ZurdoDev

Проверьте консоль в вашем браузере на наличие ошибок. Также проверьте, чтобы убедиться, что jquery.js заряжен.

Richard Deeming

Похоже, что часть вашего кода была потеряна, когда вы его вставили. Например, эта линия полностью искорежена:

var container = $(this).find(".name) + "']"),

На линии отсутствует селектор:
var container = $(this).find("")

И еще один пропавший без вести на линии:
$("").html(this.message.replace('|', '')).appendTo(list);

Member 10549164

Привет Ричард,

Пожалуйста, найдите код в jquery.validate.unobtrusive.js файл.

\\\
(функция ($) {
var $jQval = $.validator,
адаптеры,
data_validation = "ненавязчивая валидация";

setValidationValues функции(параметры, имяправила, значение) {
варианты.правила[имяправила] = значение;
если (параметры.сообщение) {
варианты.сообщений[имяправила] = вариантов.сообщение;
}
}

функция splitAndTrim(значение) {
возвращаемое значение.заменить(/^\S+С|Ь\+$/г, "").Сплит (/и\S*,\х*/г);
}

функция escapeAttributeValue(значение) {
// Как уже упоминалось выше http://api.jquery.com/category/selectors/
возвращаемое значение.заменить(/([!"#$%&усилитель;'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
}

функция getModelPrefix(fieldName) {
return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
}

функция appendModelPrefix(значение, префикс) {
if (value.indexOf("*.") === 0) {
value = value.replace("*.", префикс);
}
значение;
}

функция onError(error, inputElement) { // 'this' - это элемент формы
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
= контейнер replaceAttrValue.м("данные-valmsg-заменить"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;

контейнер.removeClass("поле-проверка-действительно").добавление("поле-проверка-ошибка");
error.data("unobtrusiveContainer", контейнер);

если (заменить) {
контейнер.пустые();
error.removeClass("input-validation-error").appendTo(контейнер);
}
еще {
ошибка.скрыть();
}

ошибка.текст(ошибка.текст().функцию substr(ошибка.текст().метод indexOf("|") + 1));
}

функция onErrors(event, validator) { //'this' - это элемент формы
var container = $(this).find("[data-valmsg-summary=true]"),
список = контейнер.найти("ул");

если (АМПП список&;&амп; список.длина и усилитель; & валидатор.errorList.длина) {
список.пустые();
контейнер.добавление("проверка-резюме-ошибки").removeClass("проверка-резюме-действует");

$.each(validator.errorList, функция () {
$("").html(this.message.replace('|', ")).appendTo(список);
});
}
}

функция onSuccess(error) { // 'this' - это элемент формы
var container = error.data("unobtrusiveContainer"),
= контейнер replaceAttrValue.м("данные-valmsg-заменить"),
заменить = replaceAttrValue ? $.parseJSON(replaceAttrValue) : нуль;

если (контейнер) {
контейнер.добавление("поле-проверка-действительно").removeClass("поле-проверка-ошибка");
error.removeData("unobtrusiveContainer");

если (заменить) {
контейнер.пустые();
}
}
}
\\\

Richard Deeming

Сайт все же сумел проглотить селектор на линии:

$("").html(this.message.replace('|', '')).appendTo(list);

Я предположил, что он соответствует оригинальному селектору: $("<li />")

Member 10549164

Да, спасибо, то, что вы предположили, верно.. Я пытаюсь снова вставить эту строку сюда

$("").html(this.message.replace('|', ")).appendTo(список);

Richard Deeming

Это случилось снова. :)

Вы либо должны HTML-кодировать текст (&lt; вместо <, &gt; вместо >), или поставить <pre>...</pre> бирки вокруг него.

Member 10549164

По какой-то причине метка исчезает в строке.
Мой вопрос снова..не могли бы вы сообщить мне, почему символ ' | ' () в сообщении проверки) не заменяется при развертывании на серверах. Он правильно заменяется при запуске в локальном хосте.

Richard Deeming

Я предполагаю, что либо вы еще не обновились jquery.validate.unobtrusive.js на сервере или что версия на сервере фактически загружается jquery.validate.unobtrusive.min.js, или версия скрипта из CDN.

Если он использует CDN, то вы не сможете его изменить.

Если он загружается jquery.validate.unobtrusive.min.js, то вам нужно минимизировать вашу обновленную версию файла.

Member 10549164

Спасибо. Я проверю на сервере и обновлю, какая версия скрипта загружена на сервер.

Member 10549164

Огромное спасибо Ричарду, что в файле min не было обновления.
Я хочу, чтобы вы знали, что происходит на сервере.
Сборка отправила оба файла на сервер. По умолчанию он попытался загрузить файл min, который не имел модификации. Когда я удалил файл min из решения на Dev, код работает отлично. Я удивлен, что локально наша машина принимает обычный файл вместо минимального файла.

Поэтому локально он принимал обычный файл а на сервере его загружал с min.js..

Еще раз большое спасибо. Я обновлю файл min.

Member 10549164

Привет Ричард,
Могу ли я, пожалуйста, получить min.js код следования jquery.validate.unobtrusive.js код

1) ошибка.текст(ошибка.текст().функцию substr(ошибка.текст().метод indexOf("|") + 1));


потому что я не нахожу эквивалентной функции .text в intellisense in min.js файл.

1 Ответов

Рейтинг:
7

Richard Deeming

Как уже говорилось в комментариях, локальная версия сайта использует ваши измененные jquery.validation.unobtrusive.js файл, но опубликованная версия вашего сайта использует минимизированный jquery.validation.unobtrusive.min.js файл, который не был изменен.

Самый простой способ обновить уменьшенный файл-использовать расширение Mads Kristensen "Bundler & Minifier" :
Bundler & Minifier - торговая площадка Visual Studio[^]

После того как вы установили расширение, щелкните правой кнопкой мыши на jquery.validation.unobtrusive.js файл в обозревателе решений и выберите Bundler & Minifier ⇒ Minify File.

Как только вы это сделаете, любые будущие изменения в jquery.validation.unobtrusive.js файл должен автоматически обновляться jquery.validation.unobtrusive.min.js и файл тоже.