H.AL Ответов: 2

Findcontrol главной страницы в содержимом страницы не работает, когда элемент управления невидим


Так что у меня есть .Чистый веб-сайт с главной страницей и некоторым содержимым страницы ... Я использую vb.net с помощью framework 4.0 и jquery 1.6 я пытаюсь показать панель, которая присутствует на главной странице и невидима по умолчанию. Я пытаюсь сделать это со своей страницы контента на стороне клиента с помощью javascript.

Ниже-моя группа в мастер.aspx-файл

<asp:Panel ID="PanelMsg" runat="server" CssClass="SMSMSG" Visible="false">
<asp:Label ID="labMsg" runat="server">test test </asp:Label>
<input id="AnimationDiv" type="checkbox" onclick="addTotargetGroup(this);" />
<label class="AnimationDiv" for="AnimationDiv">
   An SMS has been sent to Insured.</label>
</asp:Panel>


JavaScript в my_page.aspx-файл:

var PanelMsg = document.getElementById('<%=CType(Me.Master.FindControl("PanelMsg"), Panel).ClientID %>');
alert(PanelMsg);


В этом случае PanelMsg равен null, но если я изменю видимость панели на true, то PanelMsg будет [object HTMLDivElement]. Итак, главная проблема заключается в том, что я пытаюсь получить panelMsg и показать его здесь, а также изменить значение метки, но оно возвращается как null, когда оно невидимо. Так как же я могу решить эту проблему?

Что я уже пробовал:

Я попытался получить значение метки, когда панель видна, и мне это удалось:

var labMsg = document.getElementById('<%=CType(Me.Master.FindControl("labMsg"), Label).ClientID %>');
alert(labMsg.innerHTML);



Но когда я запускаю тот же код с невидимым pan, я получаю ошибку: не могу прочитать свойство innerHTML null.

2 Ответов

Рейтинг:
13

F-ES Sitecore

Когда компонент не виден, просмотрите источник страницы, видите ли вы свой PanMsg div в источнике? Нет, потому что если он не виден, то не визуализируется и не отправляется клиенту, так как же ваш js может взаимодействовать с ним?

Если вы хотите сделать что-то видимым на стороне клиента, то не устанавливайте свойство Visible в false, а измените его стиль и установите стиль "display:none;"

Чтобы опередить ваш следующий вопрос, google "set style on asp: panel" выяснит, как это сделать.


Рейтинг:
0

Member 12088223

2k89Tg1KHEPF

You can do the following,

add property runat="server" to the control of master page which you want to access on the main page.(ingore if already added)

after that in the page load event of the page write following,

    protected void Page_Load(object sender, EventArgs e)
    {
        System.Web.UI.MasterPage mp = this.Master;
        System.Web.UI.HtmlControls.HtmlInputText txtMasterPage = (System.Web.UI.HtmlControls.HtmlInputText)mp.FindControl("txtInputMaster");
        if(txtMasterPage.Visible == false)
        lblPage.Text = lblPage.Text + ":" + txtMasterPage.Value;
    }

this will definitely work