2009-10-13 60 views
5

我需要找到一種聲明方式(而不是在文件後面的代碼中)將ASP.Net網頁中屬性的值傳遞給用戶控件。以下是我正在嘗試做的一個簡單示例,但我無法使其工作。 這裏是哪裏,我在創建用戶控制的對象aspx頁面的標記:ASP.Net聲明性地將頁面屬性的值傳遞給用戶控件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<%@ Register Src="~/MyUserControl.ascx" TagName="MyUserControl" TagPrefix="uc1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <uc1:MyUserControl ID="MyUserControl1" runat="server" 
     UserControlProperty = '<%# Bind("PageProperty") %>' /> 
    </div> 
    </form> 
</body> 
</html> 

這裏是後面的代碼從aspx頁面(aspx.cs)文件:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
    public int PageProperty { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     PageProperty = 42; 

    } 
} 

下面是從用戶控件(ASCX文件)標記:

<%@ Control Language="C#" AutoEventWireup="true" 
CodeFile="MyUserControl.ascx.cs" Inherits="MyUserControl" %> 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 

這裏是從用戶控制隱藏文件(ascx.cs)代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class MyUserControl : System.Web.UI.UserControl 
{ 
    public int UserControlProperty { get; set; } 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     TextBox1.Text = UserControlProperty.ToString(); 
    } 
} 

所以,我想要做的就是將在aspx頁面中定義的PageProperty屬性的值傳遞給用戶控件,以設置它的UserControlProperty,然後在usercontrol的文本框中顯示該值。誰能告訴我我在這裏做錯了什麼?

+0

哪一個工作? :) – 0100110010101 2009-10-13 13:29:19

回答

4

嘗試

UserControlProperty = '<%= this.PageProperty %>' 

或考慮閱讀:http://support.microsoft.com/kb/307860#1b 有這樣的事情的Page.DataBind()和Control.DataBind()。我不太確定是否應該明確地給他們打電話,但它可能是這樣的......

如果你還想你的情況,你可以嘗試通過字符串來做到這一點:

public string UserControlProperty { get; set; } 

它完美的作品。

+0

好的建議,但它給編譯錯誤。 – 2009-10-13 13:08:07

+0

也,因爲你有任何情況下的後端,你可以聲明類似的定義到代碼隱藏... MyUserControl1.UserControlProperty = 124 – 0100110010101 2009-10-13 13:19:12

-1

我建議看看this article

它向您展示瞭如何創建自己的ExpressionBuilder來在標記中的任何地方解析C#,而無需Dat​​aBind或通過任何其他環節跳轉。

+0

謝謝你的文章的鏈接。這非常值得一讀。爲了讓你的答案完整,你應該在答案中至少包含引用解決方案的核心部分。 – Oliver 2017-06-30 11:57:19

相關問題