2012-10-22 44 views
0

我想根據XML用戶控件添加到我的網頁:獲取和LoadControl(字符串路徑)在C#中設置的參數

<?xml version="1.0" encoding="utf-8" ?> 
<Fields> 
<Group name="Main" text="Innhold"> 
<Field type="TextBox" name="Name" text="Navn"></Field> 
</Group> 
</Fields> 

用戶控件看起來像這樣TextBox.ascx:

<div class="fieldWrapper"> 
<asp:Label runat="server"><%=Label %></asp:Label> 
<asp:TextBox ID="TextBox1" runat="server" /> 
</div> 

我根據xml中的type屬性做一個LoadControl。像:LoadControl(類型+ 「的.ascx」):

var fields = from x in element.Elements("Field") select new 
{ 
type = x.Attribute("type").Value, 
name = x.Attribute("name").Value, 
text = x.Attribute("text").Value, 
            }; 
foreach (var field in fields) 
{ 
var control = LoadControl("~/UserControls/FieldControls/" + field.type + ".ascx"); 
pnl.Controls.Add(control); 
} 
FieldsHolder.Controls.Add(pnl); 

我想從XML文本屬性傳遞給在TextBox.ascx標籤。 像這樣:ctrl.Label = field.text 我知道如果我把控制轉換爲正確的類型我可以做到這一點,但我不知道類型。 我可以用這種方式反射嗎?

回答

1

我假設你所有的用戶控件共享相同的屬性,如'標籤'。我會創造像下面

public interface IUserControl 
{ 
    string Label { get; set; } 
} 

下面是用戶控件

實施

CODE

public partial class TextBox : System.Web.UI.UserControl, IUserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    private string _label; 
    public string Label 
    { 
     get { return _label; } 
     set { _label = value; } 
    } 
} 

您現在可以加載像下面

foreach (var field in fields) 
{ 
    var control = LoadControl("~/UserControls/FieldControls/" + field.type + ".ascx"); 
    (control as IUserControl).Label = field.text; 
    pnl.Controls.Add(control); 
} 
的控制和設置屬性的界面

我希望它能幫助你實現你想要什麼..

+0

我試過這個,但我仍然無法達到Label屬性。與labelproperty創建了一個接口。在TextBox.ascx中實現了接口。寫控制加載「作爲IFieldControl」。 (作爲IFieldControl的控件).Label給出「無法解析符號'標籤'」 – espvar

+0

編譯是否正確?請注意'IFieldControl'已經是.NET 4.0框架的一部分。請確保您使用的是正確的IFieldControl名稱空間。我會建議將接口重命名爲IuserControl,然後重試。 – Tariqulazam

+0

我只是想到。我改了名字,瞧。有用。 Thang你! – espvar

相關問題