2011-11-09 37 views
2

我有一個存儲在視圖模型中的電子郵件集合,我綁定到視圖中的ListBox。添加項目到asp.net mvc listbox客戶端?

@Html.TextBox("txtAddEmail") <img id="btnAddEmail">Add Email</img> 
@Html.ListBox("Emails", Model.Emails) 
@Html.ValidationMessageFor(m => m.Emails) 

我希望讓用戶能夠將其輸入到txtAddEmail文本框中添加電子郵件,然後單擊添加圖像按鈕這將然後添加電子郵件客戶端上的列表框。然後,當表格發佈時,電子郵件收藏中會顯示新聞郵件。我有客戶端代碼工作,添加項目,但在郵件收集郵件不包含新的電子郵件。

var emailToAdd = $("#txtAddEmail").val(); 

$('#Emails'). 
    append($("<option></option>"). 
    attr("value", emailToAdd). 
    text(emailToAdd)); 

有關如何做到這一點的任何想法?

UPDATE

我可以用這個

@Html.ListBox("EmailAdded", Model.Emails) 

電子郵件添加在客戶端上的EmailAdded字符串值顯示出來一個項目添加到視圖模型的值,但是怎麼辦我有它添加到集合?我決定嘗試直接綁定到電子郵件列表。添加到客戶端的列表框後,視圖模型不會顯示添加的電子郵件。有任何想法嗎?

@Html.ListBoxFor(model => model.Emails, new MultiSelectList(Model.Emails, "Id", "Address")); 
@Html.ValidationMessageFor(m => m.Emails) 

UPDATE

找到我一直在尋找here

+0

如何創建一個隱藏的文本框,當你添加一個電子郵件列表框它也將被添加到隱藏的文本框,然後通過昏迷,如電子郵件1,電子郵件2,電子郵件4,....並且該集合將獲得隱藏文本字段中的所有電子郵件地址,並且可以爲每個電子郵件分割電子郵件字符串。 Collection只能從列表中獲取選定字段的值 –

回答

1

試着改變你的jQuery元素:

append($("<option selected='selected'></option>") 

確保你也有:

<select multiple="multiple"> 
+0

只要將一個值添加到viewmodel屬性,但是有沒有將項添加到集合的方法? – NullReference

+0

因爲它是一個多選,你應該得到一系列回覆的電子郵件地址,它們應該自動被重新分配給Model.Emails。如果沒有發生,你可以檢查Request變量和ValuesProvider集合以確保它們被提交(或使用Firebug查看提交的表單變量)。我認爲你看到的是重新綁定的問題,因爲MVC總是將POST綁定到它的ModelState,而不是你的Model。因此,您可以在回發中更改模型,但不會影響綁定的內容。嘗試一個普通的字符串值,看看... –

+1

所以你需要做的是將選定的值綁定到一個屬性,例如SelectedEmails,但是從完整列表AllEmails填充下拉列表。用戶每次添加電子郵件時,都必須手動將其添加到AllEmails列表中。希望這是有道理的。想象一下,你有一個稱爲電子郵件的屬性,其中的列表框中填充了電子郵件集合。 Html.ListBoxFor(m => m.Email,Model.AllEmails)。您需要達到相同的效果,但使用多重選擇。 –

2

的答案,我敢肯定,在列表框中的項目形式收集出現在後,他們需要選擇。所以要解決這個問題,我通常有一個jQuery函數來選擇表單提交時的項目。

讓你的提交按鈕這樣的:

<input type="submit" onclick="SelectEmails();" /> 

而且這樣的函數:

function SelectEmails() 
{ 
    $("#Emails option").attr("selected", "selected"); 
}