Две страницы .aspx, использующие один и тот же файл .cs, хорошая идея? - PullRequest
1 голос
/ 12 июля 2011

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

page1.axpx -> page.aspx.cs page2.aspx -> (код выше)

Мой вопрос,

  1. Это хорошая идея, чтобы избежать лишнего кода и улучшить обслуживание?

  2. Пока все работает в тестовом проекте выше. В моем реальном проекте я получаю очень распространенную ошибку

Имя 'xxxx' не существует в текущем контексте asp

Код не скомпилируется из-за вышеуказанной ошибки. Если я запускаю приложение из браузера, оно работает (или кажется). У меня вопрос, почему я не получаю эту ошибку в одном приложении, а не в другом. Эта проблема была исправлена ​​сейчас. Но я хочу узнать, почему я сначала получаю эту ошибку, а потом играю с ней тут и там, ошибка исчезает.

Я считаю, что это действительно ошибка Microsoft. Как? Я объясняю это здесь.

Page1.aspx.cs действительно использует страницу Page.aspx, а не элементы управления page1.aspx. В Intellisence отображаются только элементы управления Page1.aspx (если вы добавите элемент управления на страницу 2, он не будет отображаться в intellesense, если вы добавите его на страницу Page 1, он будет показан). Поскольку элементы управления на обеих страницах одинаковы (включая имена и идентификаторы), они чудесным образом работают. Иногда компилятору это не нравится и выдает ошибку (без видимых причин). Microsoft должна решать эти проблемы более элегантно и не бросать это на нас.

Так что это для меня решено, но кто-нибудь может объяснить это таинственное поведение.

Ответы [ 5 ]

8 голосов
/ 12 июля 2011

Лучше поместить материал в один пользовательский элемент управления и использовать этот элемент управления на обеих страницах. Делать это будет намного проще.

0 голосов
/ 25 марта 2014

Имя класса = CsForAllPages.cs Содержание:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
public partial class general : System.Web.UI.Page
{
        // Your Same Code For all .aspx Pages
}

в следующем aspx-страницах установлено

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
    CodeFile="~/CsForAllPages.cs " Inherits="general" %>
0 голосов
/ 11 августа 2011

Абсолютно хорошо использовать класс, совместно используемый страницами. Это было в использовании некоторое время. Однако лучший подход будет; если вы создаете базовый класс и наследуете этот класс вместо System.Web.UI.Page:

Смотрите следующие ссылки:

  1. http://www.4guysfromrolla.com/articles/041305-1.aspx
  2. http://aspalliance.com/63_Base_Page_and_User_Control_Classes

Удачи

0 голосов
/ 11 августа 2011

Не поддерживается Microsoft

Я обсуждал это с Microsoft, и вот что я получил от них.

After further investigation, here are the results. Due to the manner in which Intellisense works, we cannot support Intellisense for scenarios involving a shared code behind on the aspx.cs files. There are two different approaches that one can take to deal with this scenario. The option supported in VS is using either AppCode or UserControll for the common code elements and then calling those methods to achieve a common code base. The second option involves using the CodeBehind in the manner that you are currently using it (without Intellisense), and assuming that the code is correct with respect to both design pages, the code should compile correctly since it is an ASP.NET supported scenario. Thank you for your feedback.

Так вот, что это значит

  1. Intellisense не будет работать с обеими страницами, но только с одной страницей
  2. ваш код будет компилироваться, только если оба элемента управления находятся на обеих страницах!

Это действительно противоречит идее иметь общий файл codeBehind. Мой сценарий, скорее всего, будет двумя небольшими страницами, использующими один и тот же код. Но для Microsoft две немного разные страницы не могут использовать один и тот же код за файлом

Идеальные сценарии должны быть

  1. Intellisense должен выбрать элементы управления на обеих страницах
  2. Код должен компилироваться, если элемент управления, к которому осуществляется доступ, присутствует на одной из двух страниц.
0 голосов
/ 12 июля 2011

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

Причина этого в том, что человеку, который не очень глубоко вовлечен в проект (например, вы, через несколько месяцев ...), легко редактировать код, не осознавая, что он затрагивает более одной страницы.


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

...