【问题标题】:asp.net: (c# client-side) how to access html element created after page loads?asp.net:(c#客户端)如何访问页面加载后创建的html元素?
【发布时间】:2012-05-14 07:11:23
【问题描述】:

想象一下,

第 1 步:加载 ASPX 页面。
第 2 步:Button 触发一个脚本,该脚本创建一个带有 id 或 class 标签的 html 元素(div、span 等),包括 runat server 属性。

我的问题是,

最后一步:如何从我的 C# 文件中访问该元素并获取它的内部 html,以便将其保存为字符串?

PS:我将使用该字符串将其保存在我的 mssql 数据库中。

【问题讨论】:

  • 你检查Request.Form了吗,在那里找到你关心的ID。

标签: c# html asp.net pageload


【解决方案1】:

如果不对服务器进行完整的回发,就无法创建“真正的”runat=server 元素/控件。

最好的方法可能是在提交页面之前编写一些脚本,将 innerHTML 存储到 ASP.Net 隐藏字段中。然后,您可以访问此隐藏字段的值以获取数据。

如果您想动态创建多个对象,则需要使用标准的 html 隐藏输入字段,因为您无法通过 javascript 创建 asp.net 服务器控件。

<input type="hidden" name="fieldData_1" value="control 1 html content">
<input type="hidden" name="fieldData_2" value="control 2 html content">

然后您就可以从 Request.Form 对象访问这些隐藏字段:

Request.Form["fieldData_1"]

了解这一点后,您现在可以遍历表单数据并处理所有动态字段

foreach (string fieldData in Request.Form)
{
    if(fieldData.Contains("fieldData_"){
        //process the data for each field
    }
}

也可以避免一起使用隐藏字段,而直接使用 __doPostback('', '') 方法将数据传递到服务器。这可以通过许多不同的方式实现,所以我将推荐您到 http://dopostback.net 了解该方法的工作原理。

【讨论】:

  • 我认为这会解决我的问题,但是如果我的元素太多了,比如 html 表中有很多行怎么办?我需要逐行选择并保存字段吗?
  • 我们使用我们的内容管理系统来做到这一点。我们需要向页面动态添加许多元素并将内容存储在回传中。为此,不要使用 asp.net 隐藏控件,而是动态创建标准的 html 隐藏控件(
  • 您可能希望为每个字段指定一个公共前缀,以便您可以遍历 Request.Params 对象并处理每个新的隐藏字段。
  • 这就是我要找的东西 :D 非常感谢 :D
【解决方案2】:

runat="server" 属性添加到标签中,使其成为 HTML 控件,并且可以通过其 ID 从 .cs 文件中访问

【讨论】:

  • 我已经提到我正在使用 runat="server" 属性。但是我的 C# 将尝试在页面加载时访问该元素,如果该元素是在页面加载后创建的,我的 C# 代码将失败并在页面加载时卡住。
  • Okey 您是否使用 Page.Controls.Add(ControlID); 将 HTML 控件添加到页面?
【解决方案3】:

我认为您需要将元素内部 HTML 发布回服务器。我会做什么,在客户端函数中,获取新创建元素的内部 HTML,将其存储在隐藏字段中,然后调用 __doPostBack('&lt;hidden element id&gt;', '');

【讨论】:

  • 我真的认为你的回答和@bgolson 会解决我的问题,我会试试的。我从未使用过 __doPostBack(),但我会搜索它。但理论上我需要将我的信息保存在一个隐藏字段中,我的问题是我会有很多元素,比如要保存的表格行,它们是在页面加载后创建的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多