ASP.NET CodeBehind System.Web.UI.Control.Controls возвращает один элемент - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть page.aspx, верхняя строка которого выглядит следующим образом:

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

Это первый раз, когда я пытался запустить aspx (или любую другую) веб-страницу.

Я думаю, что мне нужно runat="server" где-то на странице, я поместил это в HTML-тег body, так как есть несколько входов (лучший способ сделать это также будет приветствоваться, хотя это и не мой главный вопрос)

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

C # у меня на page.aspx.cs ниже

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), поэтому я прибегнул к описанному выше, чтобы попытаться найти любой элемент управления. В экземпляре, содержащемся в цикле foreach C #, элемент списка contr имеет свойство Text, содержащее в виде строки то, что я ожидал бы содержать в коллекции Controls. Использование точного кода выше свойства Text содержит все, что находится внутри тега 'body' в виде строки.

Так как это мой первый раз, я уверен, что все неправильно, поэтому, пожалуйста, скажите мне, если нужна дополнительная информация.

Заменив метод find для элемента body на

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 голосов
/ 18 сентября 2018

Так что для таких идиотов, как я, использую CodeBehind и пытаюсь получить элементы. Насколько я могу сказать, каждый элемент, который вы хотите найти , должен иметь runat="server" внутри тега, а не один runat="server" для всей страницы.

И попытка использовать идентификатор элемента напрямую, поскольку объекты не работали, потому что у меня не было файла .aspx.designer.cs. В Visual Studio 2017 опция исправления этого «Преобразовать в веб-приложение» находится в раскрывающемся меню «Проект», если выбран конвертируемый файл .aspx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...