2010-02-12 77 views
3

我想從自定義ASP.NET用戶控件中公開一個複雜屬性,以便可以從aspx頁面中的控件標記中設置該屬性在ASP.NET用戶控件中公開一個複雜的屬性

事情是這樣的:

public class TestData { 
    public int X; 
    public int Y; 
} 

public partial class TestControl : System.Web.UI.UserControl { 

    public TestData TestProperty { 
     get { 
      return ViewState["TestProperty"] as TestData; 
     } 
     set { 
      ViewState["TestProperty"] = value; 
     } 
    } 
} 

然後在包含我想有類似的控制頁面的.aspx文件:

<div> 
    <testns:TestControl runat="server" ID="TestControl1" TestProperty="X:1,Y:2"/> 
</div> 
+2

當你嘗試這樣發生了什麼?或者你沒有預料到什麼? – 2010-02-12 10:46:59

+0

你應該有什麼工作。 – 2010-02-12 10:47:47

+0

@Hans和馬蒂亞斯,我編輯的問題,我希望這是更清楚現在... – 2010-02-12 10:51:06

回答

6

對不起,回答我的問題,但我發現了幾個這樣做的方式,我想他們可能是有用的人別人也:)

序列化對象控件的屬性,必須定義一個適當的TypeConverter,並應用TypeConverterAttribute的屬性類型。這裏是一個例子:How to: Implement a Type Converter

更容易,你可以堅持控制的內容屬性,就像這樣:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wbctrlstst._Default" %> 
<%@ Register TagPrefix="x" TagName="TestControl" Src="~/TestControl.ascx" %> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <x:TestControl runat="server" ID="testlist1"> 
      <TestProperty X="1" Y="42" /> 
     </x:TestControl> 
    </div> 
    </form> 
</body> 
</html> 

唯一的要求,有什麼我能看到的,是該類型必須有一個默認的構造函數。您可以將PersistenceModeAttribute的屬性來指定此屬性應該在控件的內容被保留,但它看起來像它的默認行爲,而這並不是必需的。

[PersistenceMode(PersistenceMode.InnerProperty)] 
public TestData TestProperty { 
    get { 
     return ViewState["TestProperty"] as TestData; 
    } 
    set { 
     ViewState["TestProperty"] = value; 
    } 
} 
+0

對不起,我的答案即可。我是很肯定的,你不能這樣做(我不使用的WebForms了雖然)。 – 2010-02-12 14:45:40

+0

@Mattias:別擔心,我猜你只是想幫一下忙:) – 2010-02-12 14:48:52

相關問題