Gqq*_*big 7 c# asp.net webforms
假设我们有一个Person班级:
public class Person
{
public string FamilyName {get;set;}
public string GivenName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
并且有一个控件以某种方式显示人员列表的信息.这是aspx的伪代码:
<uc1:EmployeesViewer runat="server">
<Employees>
<Person>
<GivenName>John</GivenName>
<FamilyName>Kerry</GivenName>
</Person>
<Person>
<GivenName>Jack</GivenName>
<FamilyName>Lew</GivenName>
</Person>
<Employees>
</uc1:EmployeesViewer>
Run Code Online (Sandbox Code Playgroud)
EmployeesViewer.Employees是List<Person>属性的类型[PersistenceMode(PersistenceMode.InnerProperty)].
但是Visual Studio不会编译它.是否可以Person使用标记声明对象?
是否可以
Person使用标记声明对象?
是的,只对标记进行了一些小的更改(并且没有对Person类进行任何更改):
<%@ Page Language="C#" CodeBehind="DemoPage.aspx.cs" Inherits="DemoApp.DemoPage" %>
<%@ Register TagPrefix="uc1" Assembly="DemoApp" Namespace="DemoApp" %>
<uc1:EmployeesViewer runat="server">
<Employees>
<uc1:Person GivenName="John" FamilyName="Kerry" />
<uc1:Person GivenName="Jack" FamilyName="Lew" />
</Employees>
</uc1:EmployeesViewer>
Run Code Online (Sandbox Code Playgroud)
该uc1:标记前缀假定您的Person类是在同一集和命名空间为EmployeesViewer.如果没有,只是<%@ Register %>Person的另一个标签前缀.
注意:<uc1:Person>即使Person不是从Control派生,您也可以使用语法:
namespace DemoApp
{
public class Person
{
public string FamilyName {get;set;}
public string GivenName {get;set;}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的EmployeesViewer控件,用于呈现员工列表:
namespace DemoApp
{
[ParseChildren(true)]
[PersistChildren(false)]
public class EmployeesViewer : Control
{
private readonly List<Person> _employees = new List<Person>();
[PersistenceMode(PersistenceMode.InnerProperty)]
public List<Person> Employees
{
get { return _employees; }
}
protected override void Render(HtmlTextWriter writer)
{
foreach (Person person in this.Employees)
{
writer.RenderBeginTag(HtmlTextWriterTag.P);
writer.WriteEncodedText(string.Format("{0} {1}", person.GivenName, person.FamilyName));
writer.RenderEndTag();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
[ParseChildren(true)]需要该属性,以便在运行时ASP.NET将<Employees>标记解释为属性名称而不是要呈现的文字标记.
在[PersistChildren(false)]和[PersistenceMode(PersistenceMode.InnerProperty)]需要的属性,这样,如果在设计时修改使用设计器的属性窗口的员工集合,Visual Studio中正确地坚持收藏的标记.
| 归档时间: |
|
| 查看次数: |
1069 次 |
| 最近记录: |