如何在ASP.NET中使用标记声明对象

Gqqnbig

假设我们有一Person堂课:

public class Person
{
  public string FamilyName {get;set;}
  public string GivenName {get;set;}
}

并且有一个控件以某种方式显示人员列表的信息。这是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>

EmployeesViewer.EmployeesList<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>

uc1:标记前缀假定您的Person类是在同一集和命名空间为EmployeesViewer。如果不是,则只是<%@ Register %>Person的另一个标签前缀。

注意:<uc1:Person>即使Person不是从Control派生的,也可以使用以下语法:

namespace DemoApp
{
    public class Person
    {
        public string FamilyName {get;set;}
        public string GivenName {get;set;}
    }
}

这是一个简单的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();
            }
        }
    }
}

[ParseChildren(true)]属性是必需的,以便在运行时ASP.NET将<Employees>标记解释为属性名称,而不是要呈现的文字标记。

[PersistChildren(false)][PersistenceMode(PersistenceMode.InnerProperty)]属性都需要这样,如果在设计时修改使用设计器的属性窗口的员工集合,Visual Studio中正确地坚持收藏的标记。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET中使用<%%>?

来自分类Dev

如何在asp.net中使用<%%>?

来自分类Dev

如何在javascript中的对象声明中使用变量

来自分类Dev

如何在公共对象 C# asp.net 中使用 if

来自分类Dev

如何在ASP.Net服务器端单击事件中使用HTML按钮标记?

来自分类Dev

如何在ASP.NET MVC中使用Dache的CacheClient?

来自分类Dev

如何在ASP.net中使用ApplicationUserManager?

来自分类Dev

如何在ASP.NET MVC中使用部分视图?

来自分类Dev

如何在ASP.NET MVC中使用AngularJS?

来自分类Dev

如何在ASP.NET Core应用中使用HttpClient

来自分类Dev

如何在ASP.NET Core中使用jquery

来自分类Dev

如何在ASP.NET MVC中使用ViewModels?

来自分类Dev

如何在asp.net中使用Telerik控件?

来自分类Dev

如何在asp.net中使用Page_Init

来自分类Dev

如何在ASP.NET网站中使用JMail组件?

来自分类Dev

如何在ASP.net控件中使用twitter bootstrap?

来自分类Dev

asp.net-如何在Sql中使用变量?

来自分类Dev

如何在ASP.NET 5中使用SignalR

来自分类Dev

如何在ASP.NET MVC中使用ViewModels?

来自分类Dev

如何在asp.net中使用Page_Init

来自分类Dev

如何在asp.net-vb中使用合并功能?

来自分类Dev

如何在ASP.net中使用SQL查询的结果?

来自分类Dev

如何在Ajax asp .net中使用CommandArgument

来自分类Dev

asp.net-如何在Sql中使用变量?

来自分类Dev

如何在VB ASP.NET中使用变量

来自分类Dev

如何在ASP.NET中使用参数呈现UserControl

来自分类Dev

如何在 ASP.NET MVC 5 中使用 applozic

来自分类Dev

如何在tablecell asp.net中使用添加的表格

来自分类Dev

如何在 ASP.NET 中使用视图模型?