【问题标题】:Get name attribute from the innerHTML从 innerHTML 获取 name 属性
【发布时间】:2014-12-02 08:48:18
【问题描述】:

我将内部 Html 保存在表单表的 HTML 字段中,并在后面的代码中获取内部 Html,如下所示,我想实现名称属性(内部 html 具有输入类型元素和每个输入类型都有一个名称属性,我想从 innerHTML 后面的代码中获取这些名称属性)。这有可能吗?

例如< <input name="LastName" type="text" id="LastName">

C#方法

protected void GetFormHTML()
{
    if (con.State == ConnectionState.Closed)
    {
        con.Open();
    }
    cmd = new SqlCommand("select * from Forms where FormId='" + 
                         Request.QueryString["ID"].ToString() + "'", con);
    dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {
        dr.Read();

        lblFormName.Text = dr["Name"].ToString();
        DivHTML.InnerHtml = dr["HTML"].ToString().Trim();
    }

    dr.Close();
    cmd.Dispose();
    con.Close();
}

【问题讨论】:

  • “我要在这里实现Name属性”是什么意思?我很难理解这意味着什么。
  • 先生,我的意思是说,内部 html 有输入类型元素,每个输入类型都有一个名称属性,我想得到那些名称属性
  • 我编辑我的问题@GregBurghardt
  • WC,你能帮我一个小先生@GregBurghardt
  • 您是否尝试过查看Controls 属性?每个 UserControl 都有这个属性。您可以尝试使用其 Attributes 属性中的名称递归搜索 HtmlGenericControls。

标签: c# innerhtml


【解决方案1】:

听起来您正试图解析存储在数据库中的 HTML 字符串。你需要一个图书馆,例如HTML Agility Pack.

至少 Convert.ToInt32(Request.QueryString["ID"].ToString()) 或更好,使用 ADO.NET 参数。

【讨论】:

    【解决方案2】:

    看起来这个问题之前可能已经回答过了。 Html 5 不是 xml。所以可能需要确认这个库可以使用它。

    What is the best way to parse html in C#?

    【讨论】:

      【解决方案3】:

      我不知道您使用的是什么类型的 SQL,但必须注意此操作:

      if (dr.HasRows)
          {
              dr.Read();
              ...
          }
      

      例如:SQLite 使用队列,如果还没有进行完整查询,那么在以后的某些时候,当你想要执行其他查询,但之前没有进行完整查询时,会抛出异常。更好的方法:

      if(dr.HasRows)
      {
         while(dr.Read())
         {
            ...
         }
      }
      

      或者如果你只想要first item 在sql 查询中使用LIMIT 或者通过这种方式:

      if(dr.HasRows)
      {
          bool IsFirst = true;
          while(dr.Read())
          {
             if(IsFirst)
             {
                 ...
                IsFirst = false;
             }
          }
      }
      

      但每次都使用 while(dr.Read()),而不是其他方式。

      【讨论】:

        【解决方案4】:

        为什么不使用 ASP.NET 控件,而不是使用标准的 HTML 表单输入元素。您所要做的就是将“runat=server”属性放入现有的表单输入元素中,然后您就可以从 CodeBehind 中引用您想要的所有内容。

        作为旁注,有很多更好的方法可以实现您想要做的事情。我现在可以喋喋不休。这些没有特定的顺序,都涉及您需要完成的各个方面。意思是,这些建议不是为了让您可以选择其中之一。这些是编程和/或 .NET 框架解决方案的集合,每个解决方案完成不同的事情。您可以使用它们的组合,也可以只使用一个。有些你可以用来增强你已经完成的事情。使用 LINQ 代替内联 SQL(或内联 SQL 以外的任何东西)将是一个好的开始。

        1. 数据绑定
        2. LINQ
        3. ORM - 实体框架
        4. 用“using”语句替换现有的打开/关闭连接。

        还有很多其他方法可以做你想做的事情。这些只是一些概念/想法,在对已有的内容进行更多工作之前,您绝对应该研究它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-29
          • 1970-01-01
          • 2017-04-21
          • 2018-07-17
          • 2017-11-05
          • 2016-01-03
          • 2020-11-16
          相关资源
          最近更新 更多