2

以下のRazor構文を使用して、基本的にKeyValuePairに相当するものをレンダリングし、次のHTMLを生成するMVCビューがあります。

@Html.DropDownListFor(x => x.SelectedItems, new SelectList(Model.SelectedItems, "Key", "Key"), new { Class = "selectList selectedList", size = "2" })

HTML:

<select class="selectList selectedList" id="SelectedItems" name="SelectedItems" size="2">
   <option value="842">Item 1</option>
   <option value="326">Item 2</option>
   <option value="327">Item 3</option>
</select>

以下のように、Jqueryとジェネリック関数を使用してフォームを手動で投稿してフォームをPOSTしています。

function GenericSubmit(formSelector, sender, callback) {
    if (typeof (sender) != "undefined" && $(sender).hasClass('disabled')) {
        return false;
    }

    var $that = $(formSelector);
    var that = $that.get(0);
    if ($that.valid()) {
        $.ajax({
            url: that.action,
            type: that.method,
            data: $(that).serialize(),
            success: function (data, textStatus, jqXHR) {
                callback.call(that, data);
            }
        });
    }
    return false;
}

ただし、私が経験している問題は、送信されるデータのみが実際の値であるということです(これが、JQの動作方法であると思います)が、IEnumerableにバインドする必要があります。

フォームに送信されたPOSTデータを見ると、送信されている次の値しかわかりません。これは、モデルにnullコレクションがある理由を予想しています。

SelectedItems:842
SelectedItems:326
SelectedItems:327

私のモデルは次のとおりです。

/// <summary>
/// An response for dealing with list type entities
/// </summary>
public class ListEntityResponse : EntityScreenResponse
{
    /// <summary>
    /// Contains a Enumerable of items that can be selected
    /// </summary>
    public List<KeyValueViewModel> AvailableItems { get; set; }

    /// <summary>
    /// Contains a Enumerable of items that have been selected
    /// </summary>
    public List<KeyValueViewModel> SelectedItems { get; set; }

    public ListEntityResponse()
    {
        AvailableItems = new List<KeyValueViewModel>();

        SelectedItems = new List<KeyValueViewModel>();
    }


}

わかりやすくするために、KeyValueViewModelは次のとおりです。

 public class KeyValueViewModel
    {
        public string Key { get; set; }

        public string Value { get; set; }
    }

現在の結果

私はこれを高低で検索しましたが、うまくいく主題について何も見つからないようです、助けていただければ幸いです!

ありがとう、

4

1 に答える 1

0

//あなたの質問を読み間違えたことに気づきました。

複数の値にバインドする場合は、ListBoxForを使用する必要があります

//

では、おそらくすでにバックエンドにあるものである場合、なぜコントローラーがビューからこのすべての情報を受信する必要があるのでしょうか。

フォームで送信したものだけを気にするのは理にかなっています。

必要なのがこのデータを再入力してビューを再度レンダリングすることである場合(検証エラーがあったため、これは洗練されたアプローチです)

http://www.paulstovell.com/clean-aspnet-mvc-controllers

于 2012-05-04T15:55:02.323 に答える