我有一个 aspx 文件,其中包含:
<form id="form1" runat="server">
<div>
<table border = "2" id ="pcInfo" >
<tr><td>bla bla</td><td><span id = "idex" runat ="server"></span> </td></tr>..
表中的数据是使用 JavaScript 和/或 JScript 引入的。 在 C# 代码中,当我尝试使用以下方式邮寄此数据时:
a = ".." + idex.InnerHtml.ToString() + "..";<br />
b = "-" + idex.InnerText.ToString() + "-";
a 始终为“....”,b 始终为“--”。分配是通过按钮的单击方法完成的,因此表/跨度的所有元素都有一些内容。我怎样才能获取内容?以及在哪里放置代码?
解决方案
只要使用输入字段进行显示,就可以获取使用 JavaScript 生成的内容。
InnerHtml
将获取标签的内部html,在您的问题中,您将获得span<span id = "idex" runat ="server"></span>
的InnerHtml,但标签内没有任何内容,所以这就是为什么它不会返回任何内容。假设我想要表的内部 html,所以我会做一些事情
<div id = "idex" runat ="server">
<table border = "2" >
<tr ><td >bla bla</td><td><span>asdfasdf</span></td></tr>
</table>
</div>
我使用了div,因为你无法获取表的innerhtml,所以在代码后面
var html= idex.InnerHtml;
现在它将返回 div 中的所有内容
根据我对问题的理解,您正在尝试访问后面代码中的跨度标签值。您可以从“InnerHtml”和“InnerText”获取span标签文本。
这里是 .aspx 及其 .cs 文件的测试代码。
默认.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table border = "2" id ="pcInfo" >
<tr><td></td><td><span id = "idex" runat ="server">my content</span></td></tr>
</table>
Inner Html= <asp:Label ID="lblSpanInnerHtml" runat="server"></asp:Label>
<br />
Inner Text= <asp:Label ID="lblSpanInnerText" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
默认.aspx.cs:
using System;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
lblSpanInnerHtml.Text = idex.InnerHtml;
lblSpanInnerText.Text = idex.InnerText;
}
}
}
您的问题源于对请求-响应过程的误解。仅表单元素被发送回服务器。 Asp.net Web 表单很奇特,并在名为
ViewState
的隐藏表单字段中维护一些状态信息。
任何通过 javascript 动态添加到非表单元素的内容对于服务器端代码来说基本上是不可见的。您需要另一种方法将该数据传输回服务器。最简单的方法是将数据填充到隐藏的表单元素中并在服务器端检索该值。
例如
<tr><td></td><td>
<span id = "idex" runat ="server">my content</span>
<input type="hidden" id="hdnIdx" value="my content">
</td></tr>
然后通过修改现有的 javascript 来填充隐藏字段。
然后服务器端获取值
lblSpanInnerText.Text = idex.Value;