ASP.NET CodeBehind System.Web.UI.Control.Controls返回一个元素

时间:2018-09-17 15:19:05

标签: c# asp.net webforms

我有page.aspx,其顶行如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="page.aspx.cs" Inherits="className"%>

这是我第一次尝试使用aspx(或任何)网页。

我认为我需要在页面中的某个地方放置一个runat="server",我将其放入HTML主体代码中,因为有多个输入(尽管不是我的主要问题,也可以使用一种更好的方法来实现)

<body runat="server" id="body">

我在page.aspx.cs上拥有的C#在下面

using System;
using System.Diagnostics;
using System.Web.UI;

public partial class className : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    HtmlGenericControl body = FindControl("body") as HtmlGenericControl;

        if (body != null)
        {
            foreach (Control contr in body.Controls)
            {
                 Debug.WriteLine(contr);
            }
        }
        else
        {
            //comment
        }
    }
}

我无法使用Control.FindControl(ID),所以我依靠上面的方法尝试找到任何控件。 在C#foreach循环中包含的实例中,contr列表元素在Text处具有属性,该属性包含作为字符串的字符串,我希望将其包含在Controls集合中。使用Text属性上方的确切代码将'body'标记内的所有内容都包含为字符串。

因为这是我第一次发布,所以我肯定出错了,所以请告诉我是否需要更多信息。

已将body元素的find方法替换为

HtmlGenericControl body = FindControl("body") as HtmlGenericControl;

并具有以下aspx文件内容

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JSPCheck.aspx.cs" Inherits="JSPCheckForm"%>

<!DOCTYPE html>

<html xmlns="https://www.w3.org/1999/xhtml" id="html">
    <head>

        <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.js" > </script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.js" > </script>

        <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/4.1.1/bootstrap.js" > </script>
        <link href="https://ajax.aspnetcdn.com/ajax/bootstrap/4.1.1/css/bootstrap.css" rel="stylesheet" type="text/css" />

        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.js" > </script>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.css" rel="stylesheet" type="text/css" />

        <title>Page</title>

    </head>
    <body runat="server" id="body">

        <p id="para1">test paragraph</p>

        <h3 id="h31">test header</h3>


        <form method="post" id="mainform">
            <!-- "Serial Number" row -->
            <div class="form-group">
                <label for="SerialNumber" class="control-label" >Serial Number</label>
                <!-- Entry box -->
                <input class="form-control" name="SerialNumber" value="" id="SerialNumber" type="text"/>
            </div>

            <div class="form-group">
                <button type="submit" name="command1" value="&nbsp;" class="btn btn-primary" id="Submit1"> Verify </button>
            </div>
        </form>            
    </body>
</html>

Debug将以下单行打印到控制台

System.Web.UI.LiteralControl

并且在调试时contr具有属性Text

"\r\n        \r\n        <p id=\"para1\">test paragraph</p>\r\n\r\n        <h3 id=\"h31\">test header</h3>\r\n\r\n\r\n        <form method=\"post\" id=\"mainform\">\r\n            <!-- \"Serial Number\" row -->\r\n            <div class=\"form-group\">\r\n                <label for=\"SerialNumber\" class=\"control-label\" >Serial Number</label>\r\n                <!-- Entry box -->\r\n                <input class=\"form-control\" name=\"SerialNumber\" value=\"\" id=\"SerialNumber\" type=\"text\"/>\r\n            </div>\r\n\r\n            <div class=\"form-group\">\r\n                <button type=\"submit\" name=\"command1\" value=\"&nbsp;\" class=\"btn btn-primary\" id=\"Submit1\"> Verify </button>\r\n            </div>\r\n        </form>\r\n        \r\n   "

,ID为ctl00

其他测试已确定,如果我四处移动runat="server",则可以FindControl该元素和该元素。

1 个答案:

答案 0 :(得分:0)

因此对于像我这样的白痴,使用CodeBehind并尝试获取元素。据我所知,要查找的每个元素必须在标记内包含runat="server",并且整个页面没有一个runat="server"

由于我没有.aspx.designer.cs文件,因此尝试直接将元素id用作对象是行不通的。在Visual Studio 2017中,选择可转换的.aspx文件后,可在“项目”下拉菜单中找到更正此“转换为Web应用程序”的选项。