2011-11-09 18 views
2

私はビューのListBoxにバインドしているビューモデルに格納された電子メールのコレクションを持っています。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) 

を使用してのViewModelの値に1つの項目を追加することができましたEmailAdded文字列値に現れますが、どのように行います私はそれをコレクションに追加しましたか?私は電子メールのリストに直接バインドしようと決めました。クライアントのリストボックスに追加した後、ビューモデルに追加された電子メールは表示されません。何か案は?

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

UPDATE

彼らは、私がリストボックス内のアイテムのポスト上のフォームのコレクションに表示していることをかなり確信している私はhere

+0

隠しテキストボックスを作成し、リストボックスに電子メールを追加すると、電子メール、電子メール、電子メール、などの昏睡状態で区切りテキストボックスに追加されます。コレクションは非表示のテキストフィールドにすべての電子メールアドレスを取得し、単一の電子メールごとに電子メール文字列を分割することができます。 Collectionはussuallyリストから選択したフィールドの値を取得します –

答えて

1

にあなたのjQueryの要素を変更してみてください:

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

あなたも持っていることを確認してください:

<select multiple="multiple"> 
+0

これはviewmodelプロパティに1つの値を追加するまで有効でしたが、コレクションにアイテムを追加する方法はありますか? – NullReference

+0

これは複数選択であるため、電子メールアドレスの配列を返信する必要があります。自動的にModel.Emailsに再割り当てされます。それが起こっていない場合は、Request変数とValuesProviderコレクションをチェックして、それらが送信されていることを確認できます(または、送信されたフォーム変数を確認するためにFirebugを使用します)。 MVCはPOSTではモデルではなくModelStateに常にバインドするので、あなたが見ていることは再バインドの問題だと思います。したがって、ポストバックでモデルを変更することはできますが、バインドされているものには影響しません。普通の文字列値で試してみてください... –

+1

あなたがする必要があるのは、SelectedEmailsのように、選択した値を1つのプロパティにバインドすることですが、AllEmailsの完全なリストからドロップダウンを設定することです。ユーザーが電子メールを追加するたびに、手動でAllEmailsリストに追加する必要があります。希望は意味をなさない。 ListBoxに電子メールコレクションが設定されているEmailという単一のプロパティがあるとします。 Html.ListBoxFor(m => m.Email、Model.AllEmails)。同じことを達成する必要がありますが、複数選択を使用する必要があります。 –

2

を探していた答えを見つけることが選択する必要があります。だから、これを回避するには、通常、フォームが送信されるたびにアイテムを選択するjQuery関数があります。

持っている。このようなあなたの送信ボタン:このような

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

と機能:

function SelectEmails() 
{ 
    $("#Emails option").attr("selected", "selected"); 
} 
関連する問題