2009-07-13 81 views
1

我现在有几乎所有我的网页代码(或类似的东西)此块:用户控件“包装”HTML的最佳方式是什么?

<div class="tasks"> 
    <ul> 
     <li><a href="#">Do something</a></li> 
     <li><a href="#">Do something else</a></li> 
    </ul> 
</div> 

不过,我需要把它变成一个用户控件。我想的东西,看起来像下面这样:

<foo:TaskList id="foo" runat="server"> 
    <Task><a href="#">Do something</a></Task> 
    <Task><a href="#">Do something else</a></Task> 
</foo:TaskList> 

甚至:

<foo:TaskList id="foo" runat="server"> 
    <Tasks> 
     <ul> 
      <li><a href="#">Do something</a></li> 
      <li><a href="#">Do something else</a></li> 
     </ul> 
    </Tasks> 
</foo:TaskList> 

我意识到,我使用了“模板”的概念那里,我也意识到,这不是你如何'的意思是使用模板用户控件。所以..如何am我的意思是将可变的HTML片段包装到用户控件中?

PS。我不想使用DataBinding或代码隐藏来填充此控件。所有项目必须在ASPX文件中可见。

+0

...你的意思是你想要的物品是在可见Visual Studio的设计者?为什么? – 2009-07-13 10:59:46

+0

我并没有真正了解设计师......我只是希望能够在ASPX代码中看到他们。 – James 2009-07-13 11:03:59

回答

1

看看下面这些类可以给你在.aspx页面下面的标记。你可以继续深入。所有你需要的是父对象上的一个属性。所以实现起来相当简单。

<Test:TestUserControl> 
    <Tasks> 
     <Test:Task Value="Some Value" Text="Some Text" /> 
     <Test:Task Value="Another Value" Text="More Text" /> 
    </Tasks> 
</Test:TestUserControl> 

namespace TestWebControls 
{ 
    public class TestUserControl : WebControl 
    { 

     private List<Task> _Tasks; 

     [NotifyParentProperty(true)] 
     [PersistenceMode(PersistenceMode.InnerProperty)] 
     [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
     public List<Task> Tasks 
     { 
      get 
      { 
       return _Tasks; 
      } 
      set 
      { 
       _Tasks = value; 
      } 
     } 

     public TestUserControl() 
     { 

     } 
    } 

    public class Task : WebControl 
    { 
     public string Value { get; set; } 
     public string Text { get; set; } 
    } 
} 

现在在渲染方面还有更多工作要做。所以在ASP.NET中查找Server Controls,你就可以完成剩下的工作。您将不得不创建一个设计器,以便在设计时看到控件。然后一种呈现方式。

0

当你说你在很多页面上都有相同的HTML代码时,那么你可能也想查看母版页。

主页面允许您定义一个可以被几个(内容)页面重用的公共“页面框架”。

(但也许这个建议是完全不恰当的,因为你可能已经知道masterpages)。

0

您无法将参数传递给HTML源代码中的UserControl。

你需要设置的参数在页面的Page_Load事件:

public class MyUserControl : UserControl 
{ 
    public void SetTasks(Tasks[] tasks) 
    { 
     // code 
    } 
} 

,并在网页源代码:

protected void Page_Load(object sender, EventArgs e) 
{ 
    myUserControl.SetTasks(... tasks ...); 
} 
相关问题