Пользовательский элемент управления PersistChildren - PullRequest
0 голосов
/ 11 ноября 2011

Я скачал инфраструктуру AMF (Application Mobile Framework), чтобы легко разрабатывать мобильное приложение .NET и jQuery UI mobile.

У меня есть следующая структура HTML:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LandingPage.ascx.cs" Inherits="mobile.LandingPage" %>
<%@ Register TagPrefix="mob" Namespace="Mobile.WebControls" Assembly="AMF" %>
 <mob:MobilePage Id="mobilePage" Theme="H" runat="server">
 <Header>
     <asp:Label runat="server" ID="testLabel"></asp:Label>
 </Header>
 <Content>
     <p>
         Welcome in Asp.net Mobile Framework (AMF): The Web Framework for make Web      Application. For Smartphones & Tablets.
     </p>
 </Content>
</mob:MobilePage>

Но когда я хочу установить testLabel в файле code-behind, я получаю исключение nullReferenceException в C #.

Первая часть кода класса из MobilePage в AMF.dll выглядит следующим образом

[ParseChildren(ChildrenAsProperties = true, DefaultProperty = "Items")]
[ToolboxData("<{0}:MobilePage runat=server></{0}:MobilePage>")]
public class MobilePage : Div
{
    [Browsable(false)]
    public ArrayList Items
    {
        get;
        set;
    }

Я также пытался установить для ParseChildren значение false и удалить свойство DefaultProperty. В коде позади я также попробовал следующее:

 testLabel = new Label() { Text="hello"};

Это предотвращает исключение nullReferenceException, но я не видел никакого текста.

У кого-нибудь есть решение / предложение по этой проблеме?

Я использую C # 3.5

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 12 ноября 2011

После целого дня поиска я обнаружил, что платформа AMF не поддерживает управление состоянием просмотра и формой:

«В AMF у нас может быть много мобильных страниц на одной странице asp.net.Мы не используем контроль формы (), потому что у нас может быть несколько форм на одной странице asp.net.Таким образом, стандартный веб-контроль не работает.Мы также не используем Viewstate. »

Следующий код хорошо работает в коде файла:

        Control control = ControlHelper.GetControlById(mobilePage, "testLabel");
        if (control is Label)
        {
            Label testTekst = control as Label;
            testTekst.Text = "This is the tekst that comes in the label";
        }

Спасибо за вашу помощь и предложения!

0 голосов
/ 12 ноября 2011

Поскольку вы упомянули, что у вас есть доступ к источнику, один из простых способов исправить это - наследовать MobilePage от класса Panel. Panel - это контейнерный элемент управления, который может принимать дочерние элементы (что также позволяет напрямую обращаться к ним по имени).

...