C# - Как изменить атрибуты элементов HTML

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
17
задан Deduplicator 1 February 2015 в 16:58
поделиться

11 ответов

Для доступа к этим средствам управления от серверной стороны необходимо сделать их runat = "сервер"

<ul id="nav" runat="server">
  <li class="forcePadding"><img src="css/site-style-images/menu_corner_right.jpg" /></li>               
  <li id="screenshots"><a href="screenshots.aspx" title="Screenshots">Screenshots</a></li>
  <li id="future"><a href="future.aspx" title="Future">Future</a></li>
  <li id="news"><a href="news.aspx" title="News">News</a></li>
  <li id="download"><a href="download.aspx" title="Download">Download</a></li>
  <li id="home"><a href="index.aspx" title="Home">Home</a></li>
  <li class="forcePadding"><img src="css/site-style-images/menu_corner_left.jpg" /></li>
</ul>

в коде - позади:

foreach(Control ctrl in nav.controls)
{
   if(!ctrl is HtmlAnchor)
   {
      string url = ((HtmlAnchor)ctrl).Href;
      if(url == GetCurrentPage())  // <-- you'd need to write that
         ctrl.Parent.Attributes.Add("class", "active");
   }
}
28
ответ дан 30 November 2019 в 11:53
поделиться

Код ниже может использоваться для нахождения именованного управления где угодно в иерархии управления:

public static Control FindControlRecursive(Control rootControl, string id)
{
    if (rootControl != null)
    {
        if (rootControl.ID == id)
        {
            return rootControl;
        }

        for (int i = 0; i < rootControl.Controls.Count; i++)
        {
            Control child;

            if ((child = FindControlRecursive(rootControl.Controls[i], id)) != null)
            {
                return child;
            }
        }
    }

    return null;
}

, Таким образом, Вы могли сделать что-то как:

Control foundControl= FindControlRecursive(Page.Master, "theIdOfTheControlYouWantToFind");
((HtmlControl)foundControl).Attributes.Add("class", "active");

Забыл упоминать ранее, что Вам действительно нужен runat = "сервер" на любом управлении, которое Вы хотите смочь найти таким образом =)

4
ответ дан 30 November 2019 в 11:53
поделиться

Добавьте runat =, "сервер" на тегах лития в masterpage затем добавляет это к соответствующему page_load событию для добавления 'активного' класса к литию в литии masterpage

HtmlGenericControl = HtmlGenericControl), Page. Ведущее устройство. FindControl ("снимки экрана"); литий. Атрибуты. Добавьте ("класс", "активный");

2
ответ дан 30 November 2019 в 11:53
поделиться

Вы могли зарегистрировать клиентский сценарий как это:

(идентификатор набора к идентификатору лития, который Вы хотите установить на активный)

ClientScript.RegisterStartupScript(this.GetType(), "setActiveLI", "document.getElementById(\""+id+"\").setAttribute(\"class\", \"active\");", true);

Это генерирует вызов JavaScript на странице около нижней части после того, как элементы были уже представлены.

1
ответ дан 30 November 2019 в 11:53
поделиться

Если бы они были runat=server, то Вы могли бы использовать свойство атрибутов.

0
ответ дан 30 November 2019 в 11:53
поделиться

Можно выставить литий на основной странице к любым страницам содержания путем обертывания их в свойства на основной странице:

public GenericHtmlControl Li1
{
    get
    {
        return this.LiWhatever;
    }
}

Затем на странице содержания:

MasterPage2 asd = ((MasterPage2)Page.Master).Li1.Attributes.Add("class", "bla");

, Если у меня есть то право!

0
ответ дан 30 November 2019 в 11:53
поделиться

Все части были уже обеспечены в предыдущих ответах, но соединять все это, Вы должны будете:

  • добавляют runat = атрибут "сервера" к <ul> и <li>, элементы
  • добавляют открытый метод сделать работу на основной странице, которую можно назвать от страниц с помощью основного вызова страницы
  • метод от Page_Load страниц
  • , Кроме того, Вы могли также добавить код к OnLoad (...) метод основной страницы, таким образом, Вы не должны добавлять вызов метода Page_Load на каждой странице.

    1
    ответ дан 30 November 2019 в 11:53
    поделиться

    Чтобы найти, что конкретное управление это должно будет быть определено как общественность (в сгенерированном разработчике)

    Или должно будет быть перенесено общественностью, входят в codebehind.

    0
    ответ дан 30 November 2019 в 11:53
    поделиться

    Я нашел ссылку, которая работает с помощью CSS и включает только изменение атрибута класса тега основного текста. Это означает, что нет никакого JavaScript и существует не для циклов или чего-либо.

    #navbar a:hover,
      .articles #navbar #articles a,
      .topics #navbar #topics a,
      .about #navbar #about a,
      .contact #navbar #contact a,
      .contribute #navbar #contribute a,
      .feed #navbar #feed a {
     background: url(/pix/navbarlinkbg.gif) top left repeat-x; color: #555;
    }
    
    ....
    
    <body class="articles" onload="">
    
    <ul id="navbar">
      <li id="articles"><a href="/articles/" title="Articles">Articles</a></li>
      <li id="topics"><a href="/topics/" title="Topics">Topics</a></li>
      <li id="about"><a href="/about/" title="About">About</a></li>
      <li id="contact"><a href="/contact/" title="Contact">Contact</a></li>
      <li id="contribute"><a href="/contribute/" title="Contribute">Contribute</a></li>
      <li id="feed"><a href="/feed/" title="Feed">Feed</a></li>
    </ul>
    

    Read больше здесь http://www.websiteoptimization.com/speed/tweak/current/

    0
    ответ дан 30 November 2019 в 11:53
    поделиться

    Простой логический и минимальный код, я обычно использую следующий код, особенно в динамическом меню. Надежда это помогает.

    Создают этот код метода в коде позади основного КОДА страницы

    ПОЗАДИ (C#)

    protected string SetCssClass(string page) { return Request.Url.AbsolutePath.ToLower().EndsWith(page.ToLower()) ? "active" : ""; }

    В объектах списка меню, которые Вы создали, называют этот метод, передающий название страницы как это

    СТРАНИЦА HTML (встроенный код ASPX)

    <li id="screenshots" class = "<%= SetCssClass("screenshots.aspx") %>"> <a href="screenshots.aspx" title="Screenshots">Screenshots</a></li>

    <li id="future" class = "<%= SetCssClass("future.aspx") %>"> <a href="future.aspx" title="Future">Future</a></li>

    и так далее.

    этим методом, каждый раз, когда Вы добавляете страницу и ссылку, Вы не должны писать код на каждой странице. Как раз в то самое время, когда Вы добавляете ссылку на основной странице, с каждым <li> вызывают SetCssClass(pagename) вызов метода установки класса, и это сделано. (можно переименовать метод согласно простоте.

    можно использовать более длинные коды, если Вам платят на строки кода bcoz тогда, это - всего одна строка кода. (lol). Просто ребячество. Надежда это помогает.

    Примечание: Я игнорирую другие части кода HTML, можно включать их также, которые хорошо работали бы.

    0
    ответ дан 30 November 2019 в 11:53
    поделиться

    Try this отличный пример для использования в будущем. я знаю, что эта ветка устарела, но для будущих запросов ...

    http://community.discountasp.net/showthread.php?p=33271

    0
    ответ дан 30 November 2019 в 11:53
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: