2

我有一个带有下拉控件的 asp.net 网页,如下所示:

<asp:DropDownList ID="TypeDrp" runat="server" 
        OnSelectedIndexChanged="LoadCorrectForm" AutoPostBack="True">
    <asp:ListItem>X</asp:ListItem>
    <asp:ListItem>Y</asp:ListItem>
    <asp:ListItem>Z</asp:ListItem>
    </asp:DropDownList>

    <br />

    <asp:PlaceHolder ID="PlaceHolder1" runat="server">

    </asp:PlaceHolder>

我想在回发后动态加载 placeholder1 中的控件。它们位于名为“myControls”的文件夹中,如下所示:

XTypeForm.ascx
YTypeForm.ascx
ZTypeForm.ascx

我应该如何正确调用和使用它们?有人告诉我这样使用:

protected void LoadCorrectForm(object sender, EventArgs e)
{
    string SelectedValue = TypeDrp.SelectedItem.ToString();
    Control userControl = GetSpecificUserControl(SelectedValue);
    PlaceHolder1.Controls.Clear();   // Remove old user control
    PlaceHolder1.Controls.Add(userControl);
}

但它有错误,我不知道如何为我自己的代码更改它?

4

3 回答 3

0

我不确定它会起作用,但你可以这样尝试

string SelectedValue = "foldername/"+TypeDrp.SelectedValue.ToString();
var lobjucModelTabs = (SelectedValue)LoadControl("~/yourfolder/"+SelectedValue);
PlaceHolder1.Controls.Clear();
PlaceHolder1.Controls.Add(lobjucModelTabs );

如果它不起作用,
那么您将不得不使用 switch 语句。

 string filename = TypeDrp.SelectedValue;
        UserControl userControl;
        switch (filename)
        {
            case "XTypeForm.ascx":
                UserControl ctrl = (XTypeForm)LoadControl("NewFolder1/XTypeForm.ascx");
                PlaceHolder1.Controls.Clear();
                PlaceHolder1.Controls.Add(ctrl);
                break;
        }
于 2012-10-31T09:51:51.177 回答
0

放在

<asp:DropDownList ID="TypeDrp" runat="server" 
    OnSelectedIndexChanged="LoadCorrectForm" AutoPostBack="True">
<asp:ListItem Value="XTypeForm.ascx">X</asp:ListItem>
<asp:ListItem Value="YTypeForm.ascx">Y</asp:ListItem>
<asp:ListItem Value="ZTypeForm.ascx" >Z</asp:ListItem>
</asp:DropDownList>

然后使用

字符串 SelectedValue = TypeDrp.SelectedValue.ToString();

它会起作用的。

于 2012-10-31T09:18:13.530 回答
0

To load an ascx user control, use some code like this:

if(!Page.IsPostBack) 
{ 
   WebUserControl1 uc = 
   (WebUserControl1) Page.LoadControl("WebUserControl1.ascx"); 
   PlaceHolder1.Controls.Add(uc); 
}
于 2012-10-31T09:15:28.410 回答