Jquery 响应。写入未添加a<;脚本>;标记到我的HTML

Jquery 响应。写入未添加a<;脚本>;标记到我的HTML,jquery,html,asp.net,vb.net,webforms,Jquery,Html,Asp.net,Vb.net,Webforms,我有一个ASP.NET WebForms应用程序,我在其中使用Response.Write在VB.NET中生成一些HTML代码。但是,我想添加一些验证代码: ”为必填字段添加jQuery验证程序 回答。写(“”) Write(“mandatoryAdditionalFieldRules=Object.assign(mandatoryAdditionalFieldRules,{”) Dim MandatoryAdditionalFieldsString作为新列表(字符串) 对于MandatoryA

我有一个ASP.NET WebForms应用程序,我在其中使用
Response.Write在VB.NET中生成一些HTML代码。但是,我想添加一些验证代码:

”为必填字段添加jQuery验证程序
回答。写(“”)
Write(“mandatoryAdditionalFieldRules=Object.assign(mandatoryAdditionalFieldRules,{”)
Dim MandatoryAdditionalFieldsString作为新列表(字符串)
对于MandatoryAdditionalFields中的每个q As字符串
添加(q&“:{required:true}”)
下一个
Response.Write(String.Join(“,”,mandatoryAdditionalFieldsString))
响应。写(“}”);”)
回答。写(“”)
这是JavaScript函数读取的字段列表,以确保所有这些字段都已填写:

jQuery("#formEdit").validate({
rules: Object.assign({
    InitialDate: {
        required: true,
        date: true
    },
}, mandatoryAdditionalFieldRules),
messages: {
    InitialDate: "Enter the Initial Date",
}});
我的问题是,这个脚本没有在浏览器的输出HTML中呈现,因此JavaScript代码不知道如何验证必填字段。我浏览了VB.NET代码,看到了调用它的地方。为什么在我调用
Response.Write
时,JavaScript不会出现在我的浏览器中?正在呈现包含此代码的页面的其他内容。只是我添加的JavaScript没有呈现

编辑:这可能与此页面是通过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);
});

更新:TL;DR

Write没有向我的HTML添加标记

Response.Write
工作正常。脚本将添加到页面并执行。通过在浏览器中按Ctrl+Shift+I,可以在“图元”选项卡中看到它。为此,请确保页面的JavaScript代码
响应生成的JavaScript代码中没有语法错误。还要确保找到正确的位置来加载代码,如下所述:

原始答案

我不知道您为什么希望该代码工作

总之,这是一个脆弱的代码,它最大的缺点是通过AJAX加载的内容设置JavaScript变量(
mandatoryAdditionalFieldRules
),并且希望页面中的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",
                }
            });
    });
});

更新:TL;DR

Write没有向我的HTML添加标记

Response.Write
工作正常。脚本被添加到页面并执行。您可以在浏览器中按Ctrl+Shift+I在元素选项卡中看到它。要使其工作,请确保页面的JavaScript代码
Response.Write生成的JavaScript代码中没有语法错误de>。还要确保找到正确的位置来加载代码,如下所述:

原始答案

我不知道您为什么希望该代码工作

总之,这是一个脆弱的代码,它最大的缺点是通过AJAX加载的内容设置JavaScript变量(
mandatoryAdditionalFieldRules
),并且希望它对(其他)用户可用页面中的部分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",
                }
            });
    });
});

Response.Write在ASP.NET中通常是错误的操作方式。显示了预期的方式。我也尝试了
ClientScript.RegisterStartupScript
,但脚本仍然从未出现在页面上。您使用哪个事件处理程序添加脚本(例如,.Load或.Init或…)?框架输出到页面的方式与jQuery Validate插件无关。编辑的标记。谢谢。@AndrewMorton它不在任何事件处理程序中;它只是一个VB.NET脚本,在
tags.Response.Write中运行在页面上。在ASP.NET中执行操作通常是错误的。显示了预期的方式。我尝试了
ClientScript.RegisterStartupScript也一样,但该脚本仍然不会出现在页面上。您使用哪个事件处理程序添加脚本(例如,.Load或.Init或…)?框架输出到页面的方式与jQuery Validate插件无关。已编辑的标记。谢谢。@AndrewMorton它不在任何事件处理程序中;它只是一个VB.NET脚本,在
tags.Hmm中运行。问题是我们有很多不同类型的附加字段和很多web表单,所以我不确定是否需要使用该手册只加载一个附加字段类型(ClientCareVisitionContactTypeAdditionalFields)在这里会有所帮助;我觉得只加载一个字段会破坏表单上未使用的部分。@ekolis What?该示例基于您的示例,只包括一个伪f