有很多方法可以解决这个问题,具体采用哪种方法取决于您的项目要求和可用资源。
通常会提供最佳用户体验的最流畅的方法是使用 Javascript 技术在页面需要时隐藏和显示控件。 JQuery 是我推荐的图书馆。在最基本的层面上,您只需连接控件的激活(例如 button_click 事件)并根据需要隐藏或显示包含动态内容的 div,如下所示:
$("#control").show();
// and
$("#control").hide();
或者,您可以在 C# 中通过在 ASP.NET 的许多常规 Web 控件上使用 Visible 属性来执行此操作。通常的代码隐藏方法如下所示:
private void btnControl_Click(object sender, EventArgs e)
{
var dynamicControl1 = FindControl("dynamicControl1");
dynamicControl.Visible = false; // or true, as the case may be
}
不过,这种特殊方法主要依赖于代码隐藏,我建议您尽可能避免使用。它们实际上无法测试,并且会使项目难以工作。您可以在 MVC3 框架中使用类似的方法,当然,发送和接收设置为不的控件的方式会有所不同可见的。这样做的另一个好处是,如果将某些内容设置为不可见,它甚至不会显示在模板引擎生成的 HTML 中(YMMV 取决于引擎,但我知道这在剃刀)。因此,查看您网页源代码的人将无法看到不活动的控件,这可能会或可能不会吸引您。
编辑:我认为问题不在于如何显示这些内容,而在于如何在动态输入的情况下创建和读取它们。
我确信有一种方法可以使用 Javascript 来做到这一点(这可能是最干净和最好的方法),但我对 JS 的了解还不够好,无法知道答案。您在 ASP.NET 中处理此问题的方式是制作您要向服务器端添加控件的 div(通过使用 runat='server',然后在那里添加您需要的内容。同样,微不足道的代码隐藏方法将是一些东西喜欢:
private void btnControl_Click(object sender, EventArgs e)
{
foreach(var checkBoxChecked in chkBoxes.Where(x => x.Checked))
{
div.Controls.Add(new WebControl()) // or whatever the heck else it is you need.
}
}
当然,这假定您有一个 IEnumerable<CheckBox> 可以迭代。您可能还需要IList<WebControl> 来跟踪您添加的所有垃圾。您还需要确保 CSS 正确应用于您要添加的控件的 div。再一次,代码隐藏非常糟糕,我使用这个示例只是因为它很容易在项目中启动以供自己测试。