Установите значение свойства на ведущем устройстве Page от содержания Page

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

// parseISO8601String : string -> Date
// Parse an ISO-8601 date, including possible timezone,
// into a Javascript Date object.
//
// Test strings: parseISO8601String(x).toISOString()
// "2013-01-31T12:34"              -> "2013-01-31T12:34:00.000Z"
// "2013-01-31T12:34:56"           -> "2013-01-31T12:34:56.000Z"
// "2013-01-31T12:34:56.78"        -> "2013-01-31T12:34:56.780Z"
// "2013-01-31T12:34:56.78+0100"   -> "2013-01-31T11:34:56.780Z"
// "2013-01-31T12:34:56.78+0530"   -> "2013-01-31T07:04:56.780Z"
// "2013-01-31T12:34:56.78-0330"   -> "2013-01-31T16:04:56.780Z"
// "2013-01-31T12:34:56-0330"      -> "2013-01-31T16:04:56.000Z"
// "2013-01-31T12:34:56Z"          -> "2013-01-31T12:34:56.000Z"
function parseISO8601String(dateString) {
    var timebits = /^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2})(?::([0-9]*)(\.[0-9]*)?)?(?:([+-])([0-9]{2})([0-9]{2}))?/;
    var m = timebits.exec(dateString);
    var resultDate;
    if (m) {
        var utcdate = Date.UTC(parseInt(m[1]),
                               parseInt(m[2])-1, // months are zero-offset (!)
                               parseInt(m[3]),
                               parseInt(m[4]), parseInt(m[5]), // hh:mm
                               (m[6] && parseInt(m[6]) || 0),  // optional seconds
                               (m[7] && parseFloat(m[7])*1000) || 0); // optional fraction
        // utcdate is milliseconds since the epoch
        if (m[9] && m[10]) {
            var offsetMinutes = parseInt(m[9]) * 60 + parseInt(m[10]);
            utcdate += (m[8] === '+' ? -1 : +1) * offsetMinutes * 60000;
        }
        resultDate = new Date(utcdate);
    } else {
        resultDate = null;
    }
    return resultDate;
}

То есть вы создаете «время UTC», используя дату без часового пояса (так что вы знаете, в какой локали она находится а именно «локаль» UTC, а не локальная по умолчанию), а затем вручную примените указанное смещение часового пояса.

Не было бы неплохо, если бы кто-то на самом деле думал об объекте даты Javascript более, чем, ооо, пять минут…

8
задан WedTM 2 July 2009 в 00:06
поделиться

4 ответа

Создайте свойство на главной странице и вы получаете к нему доступ со страницы содержимого:

Главная страница:

public partial class BasePage : System.Web.UI.MasterPage
{
    private string[] _RequiredRoles = null;

    public string[] RequiredRoles
    {
        get { return _RequiredRoles; }
        set { _RequiredRoles = value; }
    }
}

Страница содержимого:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load()
    {
        Master.RequiredRoles = new string[] { /*set appropriate roles*/ };
    }
}
10
ответ дан 5 December 2019 в 04:32
поделиться

Приведение типов Page.Master к вашей главной странице, чтобы вы делали что-то вроде:

((MyMasterPageType)Page.Master).Roles = "blah blah";
14
ответ дан 5 December 2019 в 04:32
поделиться

Я бы создал базовый класс для всех страниц с контентом, например:

public abstract class BasePage : Page
{
    protected abstract string[] RequiredRoles { get; }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        // display the required roles in a master page
        if (this.Master != null) {
            // value-assignment
        }

    }
}

А затем я сделал каждую страницу унаследованной от BasePage, и каждая определяла RequiredRoles

public partial class _Default : BasePage
{
    protected override string[] RequiredRoles
    {
        get { return new[] { "Admin", "Moderator" }; }
    }
}

Это имеет преимущество чистоты и СУХОЙ обработки кода обработчика OnLoad. И каждая страница, которая наследуется от BasePage, должна определять «RequiredRoles», иначе она не будет компилироваться.

6
ответ дан 5 December 2019 в 04:32
поделиться

Добавьте директиву page на дочернюю страницу:

<%@ MasterType VirtualPath="~/MasterPage.master" %>

Затем добавьте свойство на главную страницу:

public string Section { get; set; }

Вы можете получить доступ к этому свойству следующим образом:

Master.Section = "blog";
24
ответ дан 5 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

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