ASP / C #, добавление текста в текстовое поле - PullRequest
0 голосов
/ 03 марта 2011

По какой-то причине я не могу получить текст в любое текстовое поле или метку!

Я использую мастер-страницы, и код идет в коде позади представления.Я создал текстовое поле:

<asp:Textbox ID="whatever" runat="Server">

Когда я хочу добавить какой-то текст, я просто добавляю код в представлении кода позади:

whatever.Text = "myText";

Я получаю сообщение об ошибке:

"System.NullReferenceException:Object reference not set to an instance of an object"

выделение этой строки красным цветом: what.Text = "myText";

Полагаю, это потому, что там сказано, что нет, но как оно может дать мне ссылку на текстовое поле?

Извиняюсь, если ответ есть на сайте, я искал, но ничего не нашел.:)

Это мой код в Basket.asp - я изменил текстовое поле на метку, она называется bskItems

<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder3" runat="server"> <asp:Label ID="bskItems" runat="server"></asp:Label> <div id="cart"> <asp:Button ID="btnCheckout" CssClass="BasketBtnAdd" runat="server" CommandName="checkout" Text="Checkout" /> </div> </asp:Content>

Это моя главная страница,где я использую loginView.ContentPlaceHolder3 - это то место, где должно быть текстовое поле.Я только хочу, чтобы он отображал количество предметов.

<asp:LoginView ID="loginView" runat="server">
    <LoggedInTemplate>
    <asp:LoginName ID="loginName" runat="server" FormatString="Hi, {0}!"/>
    (<asp:LoginStatus ID="loginStatus" runat="server" />)
    <% 
    if (HttpContext.Current.User.IsInRole("Admin"))
    { 
    %>
    <asp:SiteMapDataSource ID="admin" SiteMapProvider="admin" runat="server" ShowStartingNode="false" />
    <asp:Menu ID="Menu" runat="server" DataSourceID="admin">
        <StaticItemTemplate>
            <%# Eval("Text") %>
        </StaticItemTemplate>        
    </asp:Menu>
    <%
    }
    if (HttpContext.Current.User.IsInRole("Users"))
    { 
    %>
    <asp:SiteMapDataSource ID="user" runat="server" SiteMapProvider="user" ShowStartingNode="false" />
    <asp:Menu ID="Menu1" runat="server" DataSourceID="user">
        <StaticItemTemplate>
            <%# Eval("Text") %>
        </StaticItemTemplate>        
    </asp:Menu>

    <%
    }
    %>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server"></asp:ContentPlaceHolder>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder3" runat="server"></asp:ContentPlaceHolder>
    </LoggedInTemplate>
    <AnonymousTemplate>
        <asp:LoginStatus ID="loginStatus" runat="server" />
        <asp:SiteMapDataSource ID="anon" runat="server" SiteMapProvider="anon" ShowStartingNode="false" />
        <asp:Menu ID="Menu2" runat="server" DataSourceID="anon">
        <StaticItemTemplate>
            <%# Eval("Text") %>
        </StaticItemTemplate>        
    </asp:Menu>
    </AnonymousTemplate>

</asp:LoginView>

Ответы [ 5 ]

1 голос
/ 03 марта 2011

Обычно я делаю элемент управления видимым как свойство моей MasterPage.

На главной странице (AMasterPage.master):

public TextBox MyTextBox { get { return this.theTextBoxControl; } }

Итак, для ребенка, использующего этот masterPage (APage.aspx):

((AMasterPage)this.Master).MyTextBox.Text = "myText";
1 голос
/ 03 марта 2011

В дополнение к другим ответам, если вы устанавливаете значение в Page.OnLoad, помните, что элементы управления главной страницы еще не созданы.

Вот полный макет заказа, в которомвещи случаются: Полный жизненный цикл ASP-страницы

0 голосов
/ 18 марта 2011

Установите ClientIDMode в текстовом поле на «Static».Когда страница отображается, она присваивает идентификатор TextBox чему-то случайному.Изменив ClientIDMode на «Static», вы сможете ссылаться на идентификатор, потому что идентификатор останется прежним и не изменится.

Или попробуйте добавить обработчик события OnDataBinding и привести «sender» как (Текстовое окно).Например:

protected void TextBox_OnDataBinding(object sender, EventArgs e)
{
     var txt = (TextBox)sender;
     txt.Text = "Something";
}

Это должно говорить напрямую с элементом управления.

0 голосов
/ 03 марта 2011

Вам нужно получить ссылку на текстовое поле на главной странице, а затем установить текст

TextBox tb = Master.Page.FindControl("whatever") as TextBox;

if(tb != null)
{
    tb.Text = "myText";

}
0 голосов
/ 03 марта 2011

При доступе к участникам мастер-страницы из Code-Behind в файле Content Place Holder, я считаю, что вам нужно сделать:

this.Master.whatever.Text = "new Text";

Проверьте эту ссылку на Главные страницы ASP.NET , из MSDN.

...