1

チェックボックスリストを<form>含むタグがあります。フォームenctype=application/x-www-form-urlencodedの場合、選択された複数のチェックボックス値は、期待どおりにコンマ区切りの文字列として表示Request.Formされます。

enctypeをmultipart/form-data(送信にプロファイル画像を含めたいため)に変更するRequest.Formと、選択されたすべてのチェックボックス値(同じ名前)がリクエストペイロードに存在するにもかかわらず、最後に選択されたチェックボックス値のみが経由で表示されます。

ペイロードの例

------WebKitFormBoundaryS2gp8PRUhbFngzPE
Content-Disposition: form-data; name="expertise-areas"

Academic career path
------WebKitFormBoundaryS2gp8PRUhbFngzPE
Content-Disposition: form-data; name="expertise-areas"

Promotion

ルートコード

var expertise = Request.Form.expertiseareas;

結果

Expected : "Academic career path,Promotion"
Actual   : "Promotion"

これは仕様によるものですか?もしそうなら、小さな画像でチェックボックスの値のリストを送信するための最良の方法は何ですか?これを2つの形式に分解する必要がありますか?

ありがとう

4

1 に答える 1

1

これが私がそれを機能させた方法です:

  1. name属性を削除して、チェックボックスがフォームに投稿されないようにします
  2. 非表示の入力を追加して、選択した値をコンマ区切りのリストとして保持します
  3. javascriptを使用して、選択したチェックボックスの値をコンマ区切りのリストに結合します
  4. 非表示の入力値をコンマ区切りのリストに設定します

私は自分のプロジェクトからこのコードをヤンクしましたが、あなたはその考えを理解しています。

HTML(かみそり)

<form id="form-profile-edit" enctype="multipart/form-data" method="POST" action="/user/profile/edit">
... more stuff
    <input id="organisational-hidden" name="organisationalareas" type="hidden"/>
    @foreach (string area in Model.OrganisationalAreas)
    {
        @Html.GetAreaCheckbox(area, 
                              user.HasOrgansiationalArea(area), 
                              @class:"organisational")
    }
...more stuff
</form>

Javascript

$('#form-profile-edit').ajaxForm({
    beforeSerialize: function() {
        var organisational = toCommaDelimited($('.organisational:checked'));
        $('#organisational-hidden').val(organisational);
    }
});
function toCommaDelimited(checkboxes) {
    return $.map(checkboxes, function (checkbox) { return checkbox.value; }).join(',');
}
于 2012-10-31T16:38:24.273 に答える