向用户控件ascx发送自定义参数

23

我需要在网页上使用用户控件(.ascx),其中一个用户控件基于2个参数,与相关文章有关。

 1. Current post
 2. Relation type

该页面需要有3个不同实例的此控件,每个都具有相同的当前文章参数,但具有不同的关系类型(标题、作者、流派)。

第一个参数我可以通过URL获取,但第二个参数该怎么办呢?

我已经搜索了一段时间,但还没有找到答案。如何传递第二个参数,以便控件可以根据这些参数加载信息? 我宁愿不为每个参数创建一个控件,否则最好直接构建无用户控件的代码 :( 谢谢!


为什么不直接创建属性(在ascx中)并从使用它的页面分配它呢? - mshsayem
你的意思是 <my:Control runat="server" MyPublicProperty="Value1" MyPublicProperty2="Value2"/> 我该如何从控件中读取这些属性? - Arturo Suarez
由于这些属性是控件(类)属性,因此它们始终可以读取/写入。 - mshsayem
1个回答

39
创建用户控件的公共属性,例如:
public partial class SampleUC : UserControl
{
    public string CurrentPost {get;set;}
    public string RelationType {get;set;}

    //...

    //...
}

使用类似标记语言的方式从页面中分配它们:

<%@ Register TagPrefix="cc" TagName="SampleUC" Src="SampleUC.ascx" %>
...
...
<cc:SampleUC id="myUC" runat="server" CurrentPost="Sample Post Title" RelationType="Title" />

或者从代码后台(使用它的页面):

protected void Page_Load(object sender, EventArgs e)
{
    //...

    myUC.CurrentPost = "Sample Post Title";
    myUC.RelationType = "Title" ;

    //...
}

1
如果对其他人来说不是非常清楚,请确保将属性设置放在页面的代码后面,而不是!IsPostBack块内。否则,在回发时它们会变成空白。 - Kristopher
如果我想发送“对象”而不是字符串,该怎么办? - amd
@amd 那么您就不能使用 asp 标记(在 aspx 页面中);但是您可以在代码后台(c#)中设置它。 - mshsayem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接