有很多方法可以处理这个问题,采用哪种方法实际上取决于您的项目要求和可用资源。
通常会提供最佳用户体验的最流畅的方法是使用 Javascript 技术在页面需要时隐藏和显示控件。 JQuery是我为此推荐的库。在最基本的层面上,您只需连接控件的激活(例如 button_click 事件)并根据需要隐藏或显示包含动态内容的 div,如下所示:
$("#control").show();
// and
$("#control").hide();
或者,您可以在 C# 中通过使用Visible
ASP.NET 的许多普通 Web 控件上的属性来执行此操作。通常的代码隐藏方法如下所示:
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。再一次,代码隐藏非常糟糕,我使用这个例子只是因为它很容易在一个项目中为自己测试。