2011-01-25 59 views
2

什麼是接近在asp.net MVC2下列情況下的最佳方式(C#):動態增長的文本字段

我有一個表格,其中用戶可以添加更多的字段......比如我問用戶的詳細信息他們擁有的個人計算設備。爲了簡單起見,我們假設我要求品牌和類型(桌面/筆記本電腦/平板電腦/其他)下拉列表,他們可以提供無限制的設備。我將與一對文本框開始:

<label>Type</label> 
<select><option>Desktop</option><option>Laptop</option><option>Tablet</option><option>Other</option></select> 
<label>Brand</label> 
<input type="text" /> 
<input type="button" value="Add more device" /> 

接着,當用戶點擊「添加更多設備」按鈕,我將顯示另一對品牌和類型的文本框...等等。

我的問題是我應該如何使用HTML幫助對於這一點,我怎麼構建視圖模型等

我從PHP的背景,我用在PHP中使用下列內容:

<input type="text" name="brand[]" /> 

這在後端會給我一系列的品牌...不知道,如果這是可行的在asp.net環境。我將不勝感激任何意見。謝謝。

[我加了下面的幾行讓我的問題更清楚] 我覺得我的問題不是很清楚。

假設我有以下視圖模型:

public class UserRegisterViewModel 
{ 
    public string DeviceBrand { get; set; } 
    public string DeviceType { get; set; } 
} 

這時候,我有兩個文本框效果很好:

<%: Html.TextBoxFor(m => m.DeviceBrand) %> 
<%: Html.TextBoxFor(m => m.DeviceType) %> 

但我現在面臨的情況是我需要允許用戶添加更多的設備品牌和類型的文本框......用戶應該能夠添加儘可能多的他需要的。

我應該如何編寫我的viewmodel和視圖?

我希望這能讓我的問題更清楚一些。我沒有隱藏和顯示文本框的問題(是的,我使用JQuery)。

謝謝。

回答

1

在C#中,像C++數組是固定大小。但是,您可以使用列表<>執行類似操作。它允許您使用添加功能動態添加數據。像這樣:

List<object> name = new List<object>(); 
name.Add(an_object); 

所以說一個字符串列表:

List<string> myStrings == new List<string>(); 
myStrings.Add("Blah"); 

他們訪問就像陣列 - Console.WriteLine(myStrings [0])輸出布拉赫

+0

嗨DivinusVox,謝謝你的迴應......我明白那一部分......但我如何在我看來實現這一點?以及我如何構建我的ViewModel?謝謝。 – user152235 2011-01-25 01:11:39

+0

@ user152235你有回答你的問題嗎?我處於類似的情況。 – updev 2012-04-06 01:04:27

0

根據scenarion有以下解決方案:

  • 如果您已經知道將顯示哪個文本框添加它們在喲你的頁面並將它們的可見性設置爲false(就像在CSS「display:none」中)並稍後顯示它們。

  • 如果你不提前知道哪些文本框將顯示你仍然可以添加他們在HTML DOM(將它添加到你的頁面的控件集合)

爲了顯示他們有兩個apporaches:

  • 在第一種情況下,可以使用jQuery或Javascript來顯示它們。
  • 在第一種情況下,使用也可以從服務器端做到這一點,將導致整個頁面回發。

  • 在第二Apporach你也可以使用jQuery或Javascript在形式

  • 在第二種情況下增加新的文本框,您可以從服務器上的C#代碼添加新的盒子但同樣會導致整個頁面回發。

使用任何方法最適合你

0

你可以做的是有UserRegister型號和有UserRegisterViewModel 蒙山列表屬性

然後在你看來,你可以有循環,使您的視圖模型列表物業

在C#

0

例如一個foreach比方說,你有你的視圖模型定義爲:

public class BrandListViewModel 
{ 
     public List<UserRegisterViewModel> Brands {get;set;} 
} 

爲您的視圖需要輸出HTML:

<select name="Brands[0].DeviceType">...</select> 
<input type="text" name="Brands[0].DeviceBrand"/> 

<select name="Brands[1].DeviceType">...</select> 
<input type="text" name="Brands[1].DeviceBrand"/> 

你需要保持索引去,使模型粘結劑可以在正確的構建你的列表訂購。現在,您可以使用jQuery來做到這一點,並且當您將項目附加到頁面時,只需要一個計數和增量。如果你想刪除一個,你需要重命名所有的字段。

您也可以使用純jQuery方法,解析元素,將項目推送到數組並將數組發送到服務器。