2009-10-13 87 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

相关问题