14

私のシナリオは次のとおりです。2つのリストボックスがあります。1つはすべてのデータベースアイテムを含み、もう1つは空です。ユーザーは、必要なアイテムを完全なリストボックスから空のリストボックスに追加します。

フォームを使用して、ユーザーが追加したすべてのアイテムを送信しています。

問題は、リストボックスから選択されたアイテムのみが送信されることです。したがって、ユーザーが一部のアイテムの選択を解除した場合、それらはフォームに送信されません。私の見解は次のようになります。

<% using (Html.BeginForm("MyAction", "MyController"))
   { %>

    <%= Html.ListBox("AddedItems", Model.Items)%>

    <input type="submit" value="Submit" name="SubmitButton"/>
<% } %>

私のコントローラーは次のようになります。

public ActionResult MyAction(FormCollection formCollection)
{
    var addedItems = formCollection["AddedItems"].Split(',');

    //....more code that does stuff with the items
}

私はすべてを間違った方法で行っていますか?アイテムを提出するより良い方法はありますか?あなたならどうしますか?

4

3 に答える 3

23

私もこれをやっています、私がそれを解決した方法はもう少しエレガントだと思います。基本的に、すべてのオプションを選択するフォーム投稿の前に実行されるJquery関数があります。

    $(function () {
        $("form").submit(function (e) {
            $("#box2View option").attr("selected", "selected");
        });
    });
于 2010-09-18T23:11:54.603 に答える
2

ただのselectboxだからです。selectboxにすべての値を投稿することはできません。追加されたアイテムをキャッチして非表示の入力に保存するには、JavaScriptを使用する必要があります。

テストされていないコードですが、私はそれがあなたを助けると思います。

<script type="text/javascript">
    function addItem() {
        var allItems = document.getElementById("AllItems");
        var op = allItems.options[allItems.selectedIndex];
        var hdSelectedItems = document.getElementById("hdSelectedItems");
        var lbSelectedItems = document.getElementById("lbSelectedItems");

        lbSelectedItems.options[lbSelectedItems.options.length] = op;

        if (hdSelectedItems.value != '') {
             hdSelectedItems.value += ","
        }
        hdSelectedItems.value += op.value;
    }
</script>
<%= Html.Hidden("hdSelectedItems") %>
<%= Html.ListBox("AllItems", Model.Items)%>
<%= Html.ListBox("lbSelectedItems") %>
<a href="#" onclick="addItem(); return false;">Add</a>
于 2010-03-04T22:25:10.190 に答える
1

チェックボックスに項目のリストを入れてみませんか。次に、アクションのチェックボックスを繰り返し処理して、選択したすべてのチェックボックスを取得します。

<% foreach(var item in Model.Items) { %>

   <%= Html.CheckBox(String.Format("ItemID.{0}", item.ID)) %> // each item tagged by the items id

<% } %>

public ActionResult MyAction(FormCollection formCollection)
{

            foreach (var key in collection.AllKeys.Where(k => !k.Contains("SubmitButton")).ToArray<string>())
            {
                 // iterates thru check boxes we got rid of the button 

            }
}
于 2010-03-04T22:20:34.603 に答える