0

私の見解:

    <div class="editor-label">
        @Html.LabelFor(model => model.UserList)
    </div>
    <div class="editor-field">
        @Html.ListBoxFor(model => model.SelectedUsers, new MultiSelectList(Model.UserList, "Key", "Value", Model.SelectedUsers))
        @Html.ValidationMessageFor(model => model.UserList)
    </div>

私のビューモデル:

public class UserListViewModel
{
    public UserListViewModel() :
        this(new List<KeyValuePair<string, string>>())
    {

    } 

    public UserListViewModel(IList<KeyValuePair<string, string>> userList)
    {
        this.UserList = userList;
        SelectedUsers = new List<string>();
    }      

    public IList<KeyValuePair<string,string>> UserList { get; set; }
    public IList<string> SelectedUsers { get; set; }
}

現在、選択した値のみを取得し、コントローラーに到達すると UserList が空になるため、再度比較することはできません。MultiSelectList から値とテキストの両方を返す方法、または少なくともコントローラーに到達するまで UserList の内容を覚えておく方法はありますか?

4

1 に答える 1

1

Html.ListBoxForヘルパーは、属性を持つ要素をレンダリングし<select>ますmultiple。HTML では、このタグをフォームに配置してフォームを送信すると、選択した値のみがサーバーに送信されます。それが HTML の仕組みです。テキストも送信する場合は、JavaScript を使用する必要があります。たとえば、select 要素の change イベントをサブスクライブし、選択したテキストのリストで更新される非表示フィールドをフォーム内に保持できます。しかし、正直なところ、それはしません。POST コントローラー アクションでは、GET アクションでフェッチしたのと同じ場所からテキストをフェッチして、最初にフォームを表示します。

于 2012-05-08T09:19:02.503 に答える