0

有没有办法从文本文件中读取 ASP 标记,并将其呈现到页面上?

我正在使用 Azure Maps 服务,并且我们在引脚上有弹出窗口。我想在弹出窗口中添加一个 ASP 按钮,以便用户可以“选择”一个位置,但我不知道该怎么做。

目前,我们将弹出内容的“模板”存储在一个文本文件中,该文件在创建地图时读取。我似乎无法在此文本文件中插入 ASP 控件,标记的呈现方式与文本文件中的完全相同,因此没有呈现按钮,但文本<asp:Button ID="Button1" runat="server" Text="Button" />被添加到 HTML 输出中,它只是呈现为空。

任何关于如何添加 ASP 按钮的建议都会很棒。

更新:

模板存储在文本文件中的原因是因为它被读取并解析为一种方法,该方法用实际数据替换该文本文件中的某些 HTML 元素,这些数据用于显示和隐藏模板中的某些项目,具体取决于地图引脚是什么选择。Azure Maps 变量popupTemplate是一个字符串,其中包含要在弹出窗口中显示的 html 标记。我需要将该 HTML 字符串传递给 Azure MapspopupTemplate以便显示。出于这个原因,我认为部分观点是行不通的。

我想要一个 ASP 按钮的原因实际上是为了易于使用。该地图位于 ASCX 控件内。单击该按钮时,需要更新控件上的属性值,关闭 Bootstrap 模式,然后执行由承载控件的父页面捕获的事件处理程序。然后,该父页面更新一个更新面板,该面板显示该控件中的属性值。我确信它可以只用 javascript 来完成,但我不知道如何完成这样的事情。我愿意接受这方面的教程,但我会说,当我在模板中添加一个标准 HTML 按钮并包含一个onclick仅显示警报的事件时,地图无法加载。我从按钮中删除了 onclick 事件,它加载正常。我不知道为什么,但这是一个不同的问题。

更新 2:

@ADyson,现在所有的处理都是在服务器端完成的,客户端完成的唯一处理是当用户点击地图上的实际图钉时。发生这种情况时,Azure 提供的 JS 会导致出现一个弹出窗口,并将占位符替换为来自(现在是静态的)数据源的实际数据,该数据源是在地图显示之前在服务器端创建的。

单击按钮时,它不会刷新整个页面。它使用 Bootstrap 提供的数据属性(通过 javascript)关闭模式,然后调用服务器端事件,该事件导致 asyncpostback 更新位于更新面板内的某些控件中的文本,然后调用该Update()更新面板上的方法,以便所选地图点显示为被选中。整个页面都不会刷新。我知道这是因为除了我们的地图点之外,地图下方是搜索结果的文本列表。该文本列表还显示一个按钮。这些按钮是使用Repeater 控件添加的ASP 控件,它们执行我需要弹出模板中的按钮执行的操作。

有没有办法从另一个非 ASP 按钮控件调用 ASP 的单击事件?这样做可以,但是因为中继器列表中的按钮是动态添加的,所以我不知道如何引用它们,因为我无法将它们的 ID 设置为我可以引用的东西。这些按钮确实有一个独特的数据属性,尽管我可以引用它,但我不确定如何获得对它的引用。我可以搜索数据属性值并使用 javascript 返回对按钮的引用,然后将我的 HTMLonclick事件设置为调用该按钮的click()事件吗?

我不想只更新 HTML 客户端的原因是,当用户单击“选择此位置”按钮时,ASCX 控件中的属性会更新。该属性用于以后的进一步处理。

我能够弄清楚为什么在添加 onclick 事件数据时地图停止工作。生成输出脚本时未能转义单引号是一个错误。

我可以分享代码,但我不确定您需要查看多少内容或哪些代码会有所帮助。

包含生成地图 javascript 的方法和属性的类(包括需要按钮的弹出模板)大约 290 行,并引用了 4 个其他类和 2 个接口。分享这一切可能很困难。一些代码还包含一些需要清理的专有和机密信息。

看来您似乎在告诉我这实际上是不可能的,我需要找到一种不同的方法来做到这一点。

4

1 回答 1

0

弹出窗口通常是动态生成的。但是,您的 ASP.NET 代码似乎在服务器时间运行,这意味着它必须提前生成。使用内置弹出窗口不是您的方案的好选择。如果您必须使用 ASP.NET 控件而不是标准 HTML,我建议创建一个与地图分离的面板,然后根据需要使用绝对定位将其浮动在地图上方。这基本上是弹出窗口在幕后所做的,但这将允许您使用经典的 ASP.NET 功能。

于 2019-02-14T15:21:02.417 回答