Dynamicaly自定义用户控件的UI

时间:2015-08-14 22:34:36

标签: c# asp.net user-controls

我想根据条件动态更改ASP.NET用户控件UI中元素的位置。例如: - 以下是我的用户控件enter image description here

的常规布局

现在我想根据条件重新定位“编辑”按钮,如下所示。 enter image description here

我可以想到以下方法,但不确定它们是否是最好的方法。

  1. 我们可以在用户控件所需的位置创建一个Button,然后根据这个条件显示该按钮并隐藏原始按钮。因此,用户控件将在UI中具有两个按钮(一个内联,另一个在新行中)。根据我的情况,我分别展示或隐藏它们。
  2. 创建另一个用户控件并使用它。
  3. 但我想这个小小的改变就是那种矫枉过正 是否有任何最知名的方法/更好的解决方案来处理这种类型,而不是我能想到的 任何建设性的意见都会有所帮助。

1 个答案:

答案 0 :(得分:0)

您可以创建两个按钮,一个按钮位于用户控件的所需位置,另一个位于目标位置。默认情况下,第一个按钮将显示为块,默认情况下,第二个按钮将显示为无。根据您的情况,您可以更改第一个按钮和第二个按钮的类,使第一个按钮隐藏,第二个按钮显示为块。这是一个例子:

来源:

<style>
    .HideButton {
        display: none;
    }

    .ShowButton {
        display: block;
    }
</style>

<form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
                <td>
                    <asp:Button ID="Button1" runat="server"  Text="Button" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Button CssClass="HideButton" ID="Button2" runat="server" Text="Button />
                </td>
                <td">&nbsp;</td>
            </tr>
        </table>
    </div>     
</form>

在代码背后:

if (something)
            {
                Button1.CssClass = "HideButton";
                Button2.CssClass = "ShowButton";
            }

另一个解决方案是更改td标记的innerHTML,如下所示:

来源:

<form id="form1" runat="server">
        <div>
            <table>
                <tr>
                    <td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
                    <td id="DesiredLocation" runat="server"><input type="button" value="button1" /></td>
                </tr>
                <tr>
                    <td id="TargetLocation" runat="server"></td>
                    <td"></td>
                </tr>
            </table>
        </div>     
    </form>

在aspx代码中:

if (something)
            {
            TargetLocation.InnerHtml = DesiredLocation.InnerHtml;
            DesiredLocation.InnerHtml = "";
            }

希望这项工作。