Response.Write не добавляет тег <script>к моему HTML - PullRequest
1 голос
/ 26 февраля 2020

У меня есть ASP. NET приложение WebForms, где я генерирую некоторый код HTML, используя Response.Write в VB. NET. Однако я хочу добавить код проверки:

' add jQuery validator for mandatory fields
Response.Write("<script type='text/javascript'>")
Response.Write("mandatoryAdditionalFieldRules = Object.assign(mandatoryAdditionalFieldRules, {")
Dim mandatoryAdditionalFieldsStrings As New List(Of String)
For Each q As String In MandatoryAdditionalFields
    mandatoryAdditionalFieldsStrings.Add(q & ": {required: true}")
Next
Response.Write(String.Join(", ", mandatoryAdditionalFieldsStrings))
Response.Write("});")
Response.Write("</script>")

Это список полей, который читается функцией JavaScript, чтобы убедиться, что все эти поля заполнены:

jQuery("#formEdit").validate({
rules: Object.assign({
    InitialDate: {
        required: true,
        date: true
    },
}, mandatoryAdditionalFieldRules),
messages: {
    InitialDate: "Enter the Initial Date",
}});

Моя проблема в том, что этот скрипт не отображается в выводе HTML в моем браузере, и поэтому код JavaScript не знает, чтобы проверить обязательные поля. Я прошел по коду VB. NET и вижу, где он вызывается. Почему JavaScript не появляется в моем браузере, когда я звоню Response.Write, чтобы записать его? Другое содержимое страницы, содержащей этот код, отображается. Это просто JavaScript, который я добавил, который не рендерит.

edit: может ли это быть как-то связано с тем, что эта страница загружается с помощью AJAX вызова?

jQuery('#ClientCareVisitationContactTypeAdditionalFields').load('../AdditionalField/AdditionalFieldDisplayHTMLContactType.aspx', {...}, function(responseTxt, statusTxt, xhr){
    if(statusTxt == "success"){
        // do stuff
    };
    if(statusTxt == "error")
        alert("Error: " + xhr.status + ": " + xhr.statusText);
});

1 Ответ

0 голосов
/ 05 марта 2020

ОБНОВЛЕНИЕ: TL; DR

Response.Write не добавляет тег к моему HTML

Response.Write работает нормально , Сценарий добавляется на страницу и выполняется. Вы можете увидеть это на вкладке Elements , нажав Ctrl + Shift + I в вашем браузере. Чтобы это работало, убедитесь, что у вас нет синтаксических ошибок в JavaScript коде страницы и коде JavaScript, созданном Response.Write. Также убедитесь, что вы нашли подходящее место для загрузки кода, как описано ниже:

Оригинальный ответ

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

ИМХО, это код fr agile, наибольшим недостатком которого является то, что вы устанавливаете переменную JavaScript (mandatoryAdditionalFieldRules) через AJAX загруженный контент, и вы ожидаете, что он будет доступен (другому ) часть кода JavaScript, найденного на странице. Я могу сказать вам, что это будет работать только на основе удачи, хотя я не уверен точно, когда происходит звонок AJAX. Вы, вероятно, можете убедиться в этом сами, проверив консоль браузера на наличие ошибки «не определено».

Кроме того, код mandatoryAdditionalFieldRules = Object.assign(mandatoryAdditionalFieldRules, {" не будет работать, если mandatoryAdditionalFieldRules уже не присвоено значение; основываясь на вашем примере, вы, вероятно, можете изменить его на mandatoryAdditionalFieldRules = Object.assign({}, {".

Если вы настаиваете на таком подходе, я думаю, что самое безопасное место для установки правил проверки - функция обратного вызова jQuery * load. :

$(document).ready(function () {
    jQuery('#ClientCareVisitationContactTypeAdditionalFields')
        .load('AdditionalFieldDisplayHTMLContactType.aspx', function () {
            $('#formEdit').validate({
                rules: Object.assign({
                    InitialDate: {
                        required: true,
                        date: true
                    }
                }, mandatoryAdditionalFieldRules),
                messages: {
                    InitialDate: "Enter the Initial Date",
                }
            });
    });
});
...