2011-06-23 74 views
5

在我的表單中,我從一個列表框移動類別另一這樣的:
enter image description here如何創建一個空的Listbox並傳遞選項而不選擇它們?

底盒是「輸入」即當表單張貼在服務器端的閱讀框。以下是我創建的列表框:

<%: Html.ListBoxFor(m => m.categories, Model.categories)%> 

我在這裏有兩個問題:

  1. 火狐,當窗體加載首次底盒總是有一個默認​​3210。有沒有可能在服務器端刪除這個? IE似乎創建一個空框但不是FF。
    要解決這個問題,我將刪除頁面加載時的空白選項。與此相關的一個問題是,當表單發生錯誤而未提交時,選項會再次被刪除。

  2. 爲了發佈底部框中的選項,他們必須被選中。爲了解決這個問題,我使用了下面的jQuery來選擇表單上的選項。


jQuery的選擇上,提交選項:

$("form").submit(function (event) { 
    $("#categories").find("option").attr('selected', 'selected'); 
}); 

jQuery來負載刪除選項:

$("#categories").find("option").remove(); 

質詢
1.我可以創建一個空在所有瀏覽器中工作的列表框?
2.我必須選擇底部框中的選項還是有解決方法?澄清:我希望儘可能在服務器端完成,最好是與MVC相關的東西。

回答

1

1:而不是刪除所有選項只是刪除空的,這種方式不會重置。

$('#mySelect option').each(function() { 
    if(!$(this).val()) 
     $(this).remove(); 
}); 

http://jsfiddle.net/yWHLW/5/

+0

這聽起來像個好主意! – Niklas

1

1. http://jsfiddle.net/wVWGm/檢查瀏覽器是否爲空列表框。

$("form").submit(function (event) { 
    $("#categories").find("option:selected"); 
}); 
+0

'1.'這不是mvc特定的,它只是純HTML嗎?任何想法如何使用ListboxFor()渲染? '2.'這只是我的jQuery的一個更短的版本。服務器端可以做嗎? – Niklas

+0

對不起,那麼也許你應該改變你的兩個問題,因爲你沒有特別指定任何東西。 –

+0

你說得對,我已經添加了一個說明。 – Niklas

1

火狐具有特殊性需要它以實際顯示選擇元件以創建空白元件。恐怕你無法解決這個問題。但是,#2潛在的解決方法可能會消除您對#1的擔憂。

如果您在添加和刪除按鈕上構建jQuery點擊事件處理程序,以創建和銷燬具有相同名稱屬性的隱藏輸入,以便在各個框之間進行可視移動的每個值,它們將作爲CSV字符串到達​​相應的成員的Request.Form集合,它可以通過調用變成值的數組:

Request.Form("myHiddenInputName").Split({","c}) 

或者等效C#代碼。您不需要選擇提交的元素,也不需要擔心刪除Firefox在服務器端創建的空值。當然...這可能不是MVC架構中最吸引人的解決方法,但這是我的第一反應,所以我想我會分享。

0

你爲什麼不創建一個使用簡單的HTML列表框;而不是使用幫手

<select style="width: 370px;" class="cmbBox1" id="ServicesList" 
multiple="multiple" name="ServicesList" size="8"></select> 
+0

因爲如果我改變模型,它的屬性,我不得不通過html搜索來改變所有的ID,手動匹配它們。如果這最終成爲唯一的解決方案,我寧願讓jQuery腳本刪除客戶端的選項。 – Niklas

相關問題