Могут ли две страницы ASPX наследовать один и тот же код класса? - PullRequest
9 голосов
/ 05 сентября 2010

Я только начинаю изучать ASP.NET. Насколько я понимаю, ASP.NET отличается от старой школы ASP тем, что логический код страницы существует в виде отдельного файла, а не встраивается в страницу ASP. Поэтому, когда пользователь запрашивает страницу типа ShoppingCart.aspx, сервер читает директиву вверху ...

<%@ Page Title="" Language="C#" MasterPageFile="~/Styles/Site.Master" AutoEventWireup="true" CodeBehind="MyShoppingCart.aspx.cs" Inherits="TailspinSpyWorks.MyShoppingCart" %>

Сообщает серверу, какой файл и какой класс в файле связан со страницей. Код позади класса также имеет переменные-члены, которые соответствуют каждому элементу управления на странице, и предоставляют способ для кода в файле кода для управления элементами управления.

Во-первых, правильно ли я понимаю?

Во-вторых, может ли сайт быть настроен с двумя отдельными страницами ASPX с одинаково именованными элементами управления, которые имеют директиву, указывающую на один и тот же файл и класс? Хотели бы вы сделать это? Обе страницы могут иметь одинаковую функциональность, но разный макет. Я думал, что это может быть способом создания отдельных «настольных» и «мобильных» версий страницы без дублирования контента в коде файлов.

Полагаю, в конечном счете, мне интересно, есть ли способ определить абстрактную страницу? Скажем, создать абстрактное определение страницы, которое говорит, что страница должна иметь элементы управления «cart_list», «total_lbl», но затем иметь возможность иметь несколько страниц, которые наследуются от этой абстрактной страницы?

Ответы [ 4 ]

8 голосов
/ 05 сентября 2010

Да, две страницы могут наследоваться от одного и того же класса. Подобно тому, как он может наследоваться от Page класса напрямую и даже не иметь ассоциированного файла .cs (полезно, когда у вас есть страница, которая не является статичной, но которая не обрабатывает события или что-то, что может потребовать класс с выделенным кодом).

На практике я думаю, что не стоит напрямую наследовать несколько страниц ASP.NET от одного класса. Это не что-то общее, поэтому:

  • код будет более сложным для понимания и невозможным для расширения,
  • будет трудно управлять в Visual Studio, особенно когда речь идет о событиях, элементах управления и т. Д.
  • вызовет много боли с существующими / отсутствующими элементами управления. См. Подробный ответ Guffa ниже .

Если несколько страниц вашего сайта используют одну и ту же логику,

  • создает один класс на страницу и наследует эти классы от общего родительского класса, который будет содержать общие методы и свойства и который будет наследовать от Page класса. Вы получите обширное и простое для понимания решение.
  • или создайте мастер-страницу, если дело является хорошим кандидатом на мастер-страницу.
3 голосов
/ 05 сентября 2010

Я только начинаю изучать ASP.NET.Насколько я понимаю, ASP.NET отличается от старой школы тем, что логический код страницы существует в виде отдельного файла, а не встроен в страницу ASP

Классический ASP и ASP.NET отличаютсяво многих отношениях основным способом является то, что классические страницы ASP являются (по большей части) процедурным, основанным на сценариях неуправляемым кодом, тогда как страницы ASP.NET компилируются, управляются и управляются событиями.Обычно страницы ASP.NET разделяют разметку и код на стороне сервера на два отдельных файла, но в этом нет необходимости.Вполне возможно поместить серверный код на страницу .aspx в

3 голосов
/ 05 сентября 2010

Вы можете проверить это , если вы используете .NET 4.0. Он описывает Request.Browser.IsMobileDevice и Request.Browser.MobileDeviceModel.

Вы можете поместить некоторую логику в код позади или в разметку ASPX, чтобы определить, работаете ли вы на мобильном устройстве. Это позволит вам хранить весь код в одном файле, но при этом выбрать, какие элементы HTML отображать и т. Д.

1 голос
/ 05 сентября 2010

Да, и нет.

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

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

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

...