Как мне получить доступ к общедоступной переменной страницы единственной страницы с главной страницы? - PullRequest
0 голосов
/ 19 января 2011

У меня есть страница - только ОДНА страница для всего сайта:

using System;
using System.Text.RegularExpressions;
using System.IO;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class CMSPageViewer : System.Web.UI.Page
{
    public int myPageID;

    protected void Page_PreInit(object sender, EventArgs e)
    {
         // Get stuff from the database

         myPageID = 1;

         // Set the Page.MasterPageFile
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // Fill in the page contents
        // This looks for and fills in asp:ContentPlaceHolder controls based on ID
    }
}

И главная страница:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Standard_Page : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int myID = (this.Page as CMSPageViewer).myPageID;
    }
}

Как я могу получить доступ к идентификатору из используемой MasterPage?

Кастинг страницы не работает. Я получаю следующую ошибку:

Compiler Error Message: CS0246: The type or namespace name 'CMSPageViewer' could not be found (are you missing a using directive or an assembly reference?)

Ответы [ 4 ]

2 голосов
/ 19 января 2011

Мне не нравится дизайн, но если в приложении есть только одна страница, тогда это начинает иметь больше смысла.

На самом деле, это не то, для чего предназначены главные страницы.Для этого и нужны темы.

2 голосов
/ 19 января 2011

Определите переменную на своей главной странице. Дайте ему надлежащие методы получения / установки. На каждой странице вызовите master.setter и "передайте переменную в" главную страницу.

По крайней мере, вы ошибаетесь, но это то, что вы должны сделать.

Ссылка на раздел "ASP.NET 3.5 Unleashed" http://www.amazon.com/dp/0672330113 в главе 5, страницы 255 - 260 для изменения свойств Master на основе интерпретируемого Page.

Опять же, ссылка на ASP.NET 3.5 выпустила главу 6, которая начинается с:

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

Другими словами, вы не должны использовать Мастер-страницу в качестве Темы, они работают вместе.

Вы хотите, чтобы я продолжал идти? У меня есть несколько других книг. Я сделал именно то, что вы пытаетесь сделать (измените мастер на основе контента), и в то время я знал, что это взлом, но я сделал это, потому что должен был. Так что я говорю вам, что я сделал, и это работает.

Теперь, пожалуйста, еще раз, скажите мне, что то, что я предлагаю, не может быть сделано. Я пойду и найду еще несколько ссылок, которые объяснят, почему вы не можете разыграть страницу изнутри Мастера.


Для тех, кто хочет отмахнуться от моего обращения к книге для справки, обратите внимание, что именно так играют большие мальчики, как играют люди, которые получают реальные контракты, и как вы информируете своего босса. Это книга. Вот для чего они. Кроме того, Стивен Вальтер не никто, он был старшим менеджером по продукту в команде ASP.NET. Поэтому он знает, о чем, черт возьми, он говорит. Я бы послушал его совет. Черт, я купил его книгу, не так ли?

0 голосов
/ 19 января 2011

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

HttpContext.Current.Session[key] = value;
0 голосов
/ 19 января 2011

На вашей главной странице используйте это:

(this.Page as CMSPageViewer ).ID
...