Добавить элемент на стороне клиента asp.net mvc listbox? - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть коллекция электронных писем, хранящихся в модели представления, которые я привязываю к 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

Мне удалось добавить один элемент к значению во ViewModel, используя эту

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

Письмо, добавленное на клиенте, отображается в строковом значении EmailAdded, но как мне добавить его в коллекцию? Я решил попробовать привязку непосредственно к списку писем. После добавления в список на клиенте модель представления не показывает добавленную электронную почту. Есть идеи?

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

UPDATE

Нашел ответ, который искал здесь

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Я почти уверен, что для того, чтобы элементы в списке отображались в коллекции форм на сообщении, их нужно выбрать.Поэтому, чтобы обойти это, у меня обычно есть функция jQuery для выбора элементов при отправке формы.

Создайте такую ​​кнопку отправки:

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

и такую ​​функцию:

function SelectEmails()
{
    $("#Emails option").attr("selected", "selected");
}
1 голос
/ 09 ноября 2011

Попробуйте изменить элемент jQuery на:

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

Убедитесь, что у вас также есть:

<select multiple="multiple">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...