如何将ASP按钮的标记插入文本文件中的ASP页面?

时间:2019-02-11 20:43:31

标签: javascript c# asp.net azure-maps

是否可以从文本文件中读取ASP标记并将其呈现到页面上?

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

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

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

更新:

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

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

更新2:

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

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

是否可以从另一个非ASP按钮控件调用ASP的click事件?那样就可以了,但是因为Repeater列表中的按钮是动态添加的,所以我不知道如何引用它们,因为我无法将其ID设置为我可以引用的内容。尽管我可以引用这些按钮,但它们确实具有唯一的数据属性,但是我不确定如何获得对其的引用。我可以搜索数据属性值并使用javascript返回对该按钮的引用,然后将HTML的onclick事件设置为调用该按钮的click()事件吗?

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

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

我可以共享代码,但是我不确定您需要看多少,甚至什么代码也无济于事。

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

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

1 个答案:

答案 0 :(得分:0)

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