有很多方法可以處理這種情況,採取的方法取決於您的項目需求和可用資源。
最平滑的方式來做到這一點,通常會提供最佳的用戶體驗將是使用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中處理這個問題的方式是讓你將控件添加到服務器端(通過使用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。再次,代碼隱藏是非常糟糕的,我僅僅使用這個例子,因爲它很容易在項目中啓動以便自己測試。
如果它始終是相同的2個控件,則只需製作不可見/禁用的控件,然後在您的事件中啓用/顯示它們。 –
我考慮過這個,但按鈕實際上是基於複選框創建控件的。也就是說,它會對我檢查的每個複選框提及的兩個控件進行檢查,並且總數複選框數量可變。所以我認爲,如果我需要做出隱藏的控制,我不知道要做多少。 – Mason