【问题标题】:Response.Write is not adding a <script> tag to my HTMLResponse.Write 没有在我的 HTML 中添加 <script> 标记
【发布时间】:2020-06-10 19:21:49
【问题描述】:

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

' 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 代码,并看到了它的调用位置。为什么当我调用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);
});

【问题讨论】:

  • Response.Write 通常是在 ASP.NET 中做事的错误方式。 Inject Javascript from asp.net code behind files 显示了预期的方式。
  • 我也试过ClientScript.RegisterStartupScript,但脚本仍然没有出现在页面上。
  • 您使用哪个事件处理程序来添加脚本(例如 .Load 或 .Init 或 ...)?
  • 框架如何输出到页面与 jQuery Validate 插件无关。编辑的标签。谢谢。
  • @AndrewMorton 它不在任何事件处理程序中;它只是一个 VB.NET 脚本,在 &lt;% %&gt; 标签中的页面上运行。

标签: jquery html asp.net vb.net webforms


【解决方案1】:

更新:TL;DR

Response.Write 没有向我的 HTML 添加标签

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

原答案

我不确定您为什么希望该代码能够正常工作。

恕我直言,这是脆弱的代码,其最大的弱点是您通过 AJAX 加载的内容设置了一个 JavaScript 变量 (mandatoryAdditionalFieldRules),并且您希望它可用于页面中的 JavaScript 代码的(其他)部分.我可以告诉你这只能基于运气,即使我不确定 AJAX 调用的确切时间。您可能可以通过检查浏览器的控制台来查看“未定义”错误。

此外,除非 mandatoryAdditionalFieldRules 已被赋值,否则代码 mandatoryAdditionalFieldRules = Object.assign(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",
                }
            });
    });
});

【讨论】:

  • 嗯...问题是我们有许多不同类型的附加字段和许多 Web 表单,所以我不确定手动加载其中一种附加字段类型(ClientCareVisitationContactTypeAdditionalFields)将在这里提供帮助;我觉得只加载一个会破坏不使用的表单上的某些内容。
  • @ekolis 什么?该示例基于您的,但仅包含一个虚拟字段而不是迭代我一无所知的 MandatoryAdditionalFields 集合。其他一切都基于您的 OP,所以我不明白问题出在哪里!
  • 抱歉,有时很难将问题提炼成基本问题,然后将解决方案的解释扩展回原来的问题。不是你的错,也不是我的错,就是这样!
  • @ekolis 我已经更新了答案。希望你能理解。
猜你喜欢
  • 2022-01-23
  • 2011-05-06
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2023-02-11
  • 2014-05-02
  • 1970-01-01
  • 2018-02-21
相关资源
最近更新 更多