Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Для доступа к этим средствам управления от серверной стороны необходимо сделать их 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");
}
}
Код ниже может использоваться для нахождения именованного управления где угодно в иерархии управления:
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 = "сервер" на любом управлении, которое Вы хотите смочь найти таким образом =)
Добавьте runat =, "сервер" на тегах лития в masterpage затем добавляет это к соответствующему page_load событию для добавления 'активного' класса к литию в литии masterpage
HtmlGenericControl = HtmlGenericControl), Page. Ведущее устройство. FindControl ("снимки экрана"); литий. Атрибуты. Добавьте ("класс", "активный");
Вы могли зарегистрировать клиентский сценарий как это:
(идентификатор набора к идентификатору лития, который Вы хотите установить на активный)
ClientScript.RegisterStartupScript(this.GetType(), "setActiveLI", "document.getElementById(\""+id+"\").setAttribute(\"class\", \"active\");", true);
Это генерирует вызов JavaScript на странице около нижней части после того, как элементы были уже представлены.
Если бы они были runat=server, то Вы могли бы использовать свойство атрибутов.
Можно выставить литий на основной странице к любым страницам содержания путем обертывания их в свойства на основной странице:
public GenericHtmlControl Li1
{
get
{
return this.LiWhatever;
}
}
Затем на странице содержания:
MasterPage2 asd = ((MasterPage2)Page.Master).Li1.Attributes.Add("class", "bla");
, Если у меня есть то право!
Все части были уже обеспечены в предыдущих ответах, но соединять все это, Вы должны будете:
<ul>
и <li>
, элементы , Кроме того, Вы могли также добавить код к OnLoad (...) метод основной страницы, таким образом, Вы не должны добавлять вызов метода Page_Load на каждой странице.
Чтобы найти, что конкретное управление это должно будет быть определено как общественность (в сгенерированном разработчике)
Или должно будет быть перенесено общественностью, входят в codebehind.
Я нашел ссылку, которая работает с помощью 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/
Простой логический и минимальный код, я обычно использую следующий код, особенно в динамическом меню. Надежда это помогает.
Создают этот код метода в коде позади основного КОДА страницы
ПОЗАДИ (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, можно включать их также, которые хорошо работали бы.
Try this отличный пример для использования в будущем. я знаю, что эта ветка устарела, но для будущих запросов ...