Как передать массивы из представления в контроллер с помощью вызова ajax или любого другого метода? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть три раскрывающихся списка с множественным выбором, и я пытаюсь передать выбранные элементы из этого раскрывающегося списка из представления в контроллер. Я объявляю массив с именем datas и pu sh выбранные элементы из списков с множественным выбором в этот массив данные успешно помещены в этот массив, но теперь я хочу передать этот массив контроллеру с помощью вызова ajax или любого другого метода, но я получаю null в контроллере?

<div class="row">
    <div class="col-sm-4">
        <div class="form-group">
            <label>Select Real Tags</label>
            @Html.DropDownListFor(m => m.DependancyMatrixVM.Real_Tag_Id_FK, (IEnumerable<SelectListItem>)ViewBag.RawTagList, new { @class = "form-control", @multiple = true, id = "Raw_Tag_List" })
            @Html.ValidationMessageFor(m => m.DependancyMatrixVM.Real_Tag_Id_FK, "", new { @class = "text-danger" })
        </div>
    </div>
    <div class="col-sm-4">
        <div class="form-group">
            <label>Select Calculated Tags</label>
            @Html.DropDownListFor(m => m.DependancyMatrixVM.Cal_Tag_Id_FK, (IEnumerable<SelectListItem>)ViewBag.CalculatedTag, new { @class = "form-control", @multiple = true, id = "Calculated_Tag_List" })
            @Html.ValidationMessageFor(m => m.DependancyMatrixVM.Cal_Tag_Id_FK, "", new { @class = "text-danger" })
        </div>
    </div>
    <div class="col-sm-4">
        <div class="form-group">
            <label>Select Manual Tags</label>
            @Html.DropDownListFor(m => m.DependancyMatrixVM.MF_Tag_Id_FK, (IEnumerable<SelectListItem>)ViewBag.ManualTagList, new { @class = "form-control", @multiple = true, id = "Manual_Tag_List" })
            @Html.ValidationMessageFor(m => m.DependancyMatrixVM.MF_Tag_Id_FK, "", new { @class = "text-danger" })
        </div>
    </div>
</div>

Jquery Код:

function SelectedItemArray() {
    var RawTags = $('#Raw_Tag_List').val();
    var calculatedTags = $('#Calculated_Tag_List').val();
    var manualTags = $('#Manual_Tag_List').val();
    var datas = [];
    datas.push(RawTags,calculatedTags, manualTags);
    $.ajax({
        url:"@Url.Action("selectedTags","CalculatedTags")",
        type: 'Post',
        contentType: 'application/json',
        dataType: 'json',
        data: JSON.stringify({ 'selectedTags':datas }),

        success: function (data) {
            debugger;
            if (data != null)
            {
                console.log(data);
               alert('ok');

                }
                else {
                    alert('Not ok');
                }
            }

    });
}

[HttpPost]
public JsonResult selectedTags(string[] selectedTags)
{

    return Json(selectedTags,JsonRequestBehavior.AllowGet);
}

1 Ответ

0 голосов
/ 05 мая 2020

Проблема здесь в том, что когда вы пытаетесь получить результат с помощью $('#Raw_Tag_List').val();, он дает вам массив, например ['1']. Таким образом, вы отправляете datas как [['1'],['2'],..] из-за datas.push(RawTags,calculatedTags, manualTags);, который не подходит для сервера.

Вам нужно объединить элементы массива с использованием merge вместо push. Смотрите: https://api.jquery.com/jquery.merge/

 datas = $.merge(RawTags,calculatedTags, manualTags);

Таким образом, у вас будет новый массив, содержащий выбранные элементы, например ['1','2']:

function SelectedItemArray() {
    var RawTags = $('#Raw_Tag_List').val();
    var calculatedTags = $('#Calculated_Tag_List').val();
    var manualTags = $('#Manual_Tag_List').val();
    var datas =  $.merge(RawTags,calculatedTags, manualTags);
    $.ajax({
        url:"@Url.Action("selectedTags","CalculatedTags")",
        type: 'Post',
        contentType: 'application/json',
        dataType: 'json',
        data: JSON.stringify({ 'selectedTags':datas }),

        success: function (data) {
            debugger;
            if (data != null)
            {
                console.log(data);
               alert('ok');

                }
                else {
                    alert('Not ok');
                }
            }

    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...