簡體   English   中英

ASP.NET訪問Panel內的非服務器控件

[英]ASP.NET access non-server controls inside Panel

我有一個繼承自Panel的自定義控件。 在加載時,我想訪問此面板內的所有控件,包括非服務器控件,以操作屬性。 面板的Controls屬性為我提供了服務器控件,但不是非服務器控件。 有沒有辦法訪問它們?

例如:

<cc:MyPanel runat="server">
    <asp:TextBox id="txt1" runat="server" />
    <input type="text" id="txt2" />
</cc:MyPanel>

Load事件期間(或實際上在呈現控件之前的任何事件),我想操縱兩個文本框。

謝謝

你必須在每個標簽上添加runat='server'或者做一些JavaScript來處理這個問題。 load事件正在查看服務器控件。

將您的控制權更改為:

<input id="txt2" runat="server" type="text" />

然后你可以這樣做:

string s = txt2.Text;

我能想到的唯一另一種方法是,如果您想實際使用表單發布值,然后使用Request. 訪問您要發布的每個變量。 但我的想法是你在尋找前者而不是后者。

最后,如果你去JS路線這里是MSDN的一篇很好的文章,告訴你如何做到這一點: http//msdn.microsoft.com/en-us/library/3hc29e2a.aspx

我建議使用RegisterStartupScript方法。 我做了一個快速測試項目,雖然我不知道你的項目的細節,但在我的測試中成功訪問和修改了面板內部的客戶端和服務器端控件的組合。

<asp:Panel ID="customPanel1" runat="server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
    <input type="text" id="clientSideInput1" /><br />
    <input type="text" id="clientSideInput2" /><br />
</asp:Panel> 

protected void Page_Load(object sender, EventArgs e)
{
    var controls = customPanel1.Controls;
    foreach(Control c in controls)
    {
        if (c.GetType() == typeof(TextBox))
            ((TextBox)c).Text = "It worked!";
    }
    if (!Page.ClientScript.IsClientScriptBlockRegistered(GetType(), "PageScripts"))
    {
        var jscript = "document.getElementById('clientSideInput1').style.background=\"Red\";";
        jscript += "document.getElementById('clientSideInput2').style.background=\"Yellow\";";
        Page.ClientScript.RegisterStartupScript(GetType(), "PageScripts", jscript, true);
    }
}

為我生產這個......

在此輸入圖像描述

希望能讓你前進!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM