2013-10-11 147 views
1

目的:閱讀從我的aspx頁面的隱藏字段值在ASCX頁如何在ascx頁面中聲明隱藏字段,以便它從aspx中的隱藏字段獲取值?

問題:我是新來的ASP,我不知道如何做到這一點。我可以在aspx頁面中設置隱藏字段的值,但是如何在ascx頁面中讀取該值?我使用的代碼如下

Page1.aspx的上述

<%@ Register Src="~/UserControl/Page2.ascx" TagName="Info" TagPrefix="uc" %> 
<asp:HiddenField ID="hdnfldInfo" runat="server" /> 

Page1.aspx.cs

String strInfo = Convert.ToString(e.CommandArgument); 
hdnfldInfo.Value = strInfo; 

Page2.ascx

HiddenField Info = (HiddenField)this.Info.FindControl("hdnfldIncDesc"); 

代碼Page2上。 ascx沒有相同的值。我錯過了什麼或做錯了什麼?

預先感謝您的任何意見,建議或意見

+0

其實我最終通過添加以下到第2頁HiddenField信息=​​ Parent.Findcontrol( 「hdnfldInfo」)作爲HiddenField解決這個; –

回答

2

ascx控件提供了我們可以使用的頁面。

this.Page 

現在我們需要從該頁面獲得控件。因爲我們知道它的名字,你可以使用的FindControl

HiddenField Info = this.Page.FindControl("hdnfldIncDesc"); 

注意,這將返回null如果與該名稱的控件無法找到。所以相應編碼。

+1

你不能保證父頁面將有一個隱藏的字段。這使得用戶控制非常有限,這不是最佳實踐 –

3

您需要在ASCX創建一個屬性(也稱爲用戶控制),並有基於隱藏字段設置該屬性aspx頁面

讓你的ASCX後面的代碼是這樣的:

public class MyUserControl : UserControl{ 
    public String MyProperty {get;set;} 

    //...do stuff with myProperty 

} 

,然後在後面

public class MyPage : Page{ 
    protected void Page_Load(){ 
     HiddenField info = (HiddenField)myHiddenField; 
     MyUserControl control = myusercontrol; 
     control.MyProperty = info.Value; 
    } 

} 
aspx頁面代碼

您可能需要更改該屬性設置的頁面生命週期的哪一部分。

我也會看看一些關於創建用戶控件的文章,因爲您是asp.net的新手。它會在以後付清。

看看: 好文章在gernal有關創建用戶控件:http://msdn.microsoft.com/en-us/library/3457w616(v=vs.100).aspx(跳到添加自定義屬性和方法,爲相關問題的用戶控制部分)

send custom parameters to user control ascx有一個好的例子

+0

'info.Value'? .Text用於文本框... – 2013-10-11 16:50:44

+0

@ebyrob感謝並更新 – Letseatlunch

+0

爲什麼將myusercontrol對象強制轉換爲MyUserControl?沒有必要這樣做。 –

2

您需要從用戶控件訪問父頁面,除了將隱藏的字段設置爲公開並且不需要保護(默認情況下),方法是進入設計器代碼。最佳做法是在用戶控件中創建一個屬性,然後由父級用戶控件設置該屬性,然後用戶控件將使用該屬性將其顯示在頁面上。

// usercontrol: 

public string MyProperty {get; set;} 

// ASPX page: 
this.ucMyUserControl.MyProperty = this.hdnfldInfo.Value; 

然後在您的用戶控件中,只要您認爲合適,就使用「MyProperty」。

+0

在頁面流中你會做這個任務嗎?在裏面?加載?別處? – 2013-10-11 16:49:01

+0

儘管您可以從用戶控件訪問父頁面,但不應該依賴此頁面,因爲您無法保證父頁面將具有隱藏字段。這使得用戶控制非常有限,這不是最佳實踐 –

+0

@ebyrob - 無論你喜歡什麼。 –

0

使用this.Parent.FindControl(HiddenBankAccountId)