Ajax post запрос передает null - C# MVC

228
31 января 2018, 11:38

Код View

if (@ViewData["CountPerform"] != null)
{
<span class="form-control">Для документа - @Html.DisplayFor(model => model.doctype.description) от @Html.DisplayFor(model => model.datedoc) № @Html.DisplayFor(model => model.numberdoc) указаны следующие исполнители
</span>
}
else
{
<span class="form-control">Для документа - @Html.DisplayFor(model => model.doctype.description) от @Html.DisplayFor(model => model.datedoc) № @Html.DisplayFor(model => model.numberdoc) необходимо указать исполнителей
</span>
}
if (@ViewData["CountPerform"] != null)
{
@Html.ListBox("SETUSERID", (MultiSelectList)ViewBag.USERID, new { @class = "form-control" })
}
else
{
@Html.ListBox("FULLUSERID", ViewBag.USERID as MultiSelectList, new { @multiple = "multiple", @placeholder = "-- укажите исполнителей --", @class = "form-control selectbox" }) 
}
if (@ViewData["CountPerform"] != null)
{
<div style="margin-top: 10px;">
    <hr />
    <div class="right" style="margin-top: 10px;">
        <input type="button" value="Закрыть" title="Закрыть форму" class="btn-close" id="_close" />
    </div>
</div>
}
else
{ 
<div style="margin-top: 150px;">
    <hr />
    <div class="right" style="margin-top: 10px;">
        <input type="button" value="Сохранить" title="Сохранить" class="btn-default" id="btnSelected" role="@Model.Id" />
        <input type="button" value="Отмена" title="Закрыть форму" class="btn-close" id="close" />
    </div>
</div>      
}   

<script src="~/Scripts/jquery.sumoselect.js"></script>
<script>
    $(document).ready(function () {
        $(function () {
            $.ajaxSetup({
                cache: false
            });
            //Добавить CheckBox в DropDownList или в ListBox
            $(document).ready(function () {
                window.asd = $('.selectbox').SumoSelect({});
            });
            var document_Id;
            $('#btnSelected').on('click', function () {
                document_Id = $(this).attr('role');
                var obj = [],
                    items = '';
                $('.selectbox option:selected').each(function (i) {
                    obj.push($(this).val());
                });
                if (obj.length > 1) {
                    for (var i = 0; i < obj.length; i++) { items += obj[i] + ', ' };
                }
                else {
                    items = obj[0];
                }
                $.ajax('/Moderator/Performers',
                {
                    async: true,
                    cache: false,
                    type: 'POST',
                    data: { _userId: obj.join(), _documentId: document_Id }
                });
                alert("data: { _userId: " + obj.join() + ", _documentId: " + document_Id + " }");
            });
        });
    });
</script>

Код контролера

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Performers(string _userId, string _documentId)
    {
        // _userId = "3,4,5";
        // _documentId = "4";
        // При тестовых параметрах работает Отлично
        try
        {
            var user_IdInt = _userId.Split(',').Select(x => Int32.Parse(x)).ToArray();
            foreach (var u in user_IdInt)
            {
               string sql = String.Format("insert into performers (document_Id,user_Id) values ('" + _documentId.ToString() + "','" + u.ToString() + "')");
                db.Database.ExecuteSqlCommand(sql);
            }
            TempData["msg"] = "Изменения произведены успешно";
        }
        catch (Exception ex)
        {
            TempData["msg"] = "Ошибка: " + ex.Message;
        }
        return RedirectToAction("Index", "Moderator");
    }

код Представления не очень важен лучше показать как код самой функции отправки данных на сервер

<script>
$(document).ready(function () {
    $(function () {

        //Добавить CheckBox в DropDownList или в ListBox
        $(document).ready(function () {
            window.asd = $('.selectbox').SumoSelect({});
        });
        var document_Id;
        $('#btnSelected').on('click', function () {
            document_Id = $(this).attr('role');
            var obj = [];
            $('.selectbox option:selected').each(function (i) {
                obj.push($(this).val());
            });
            $.ajax('/Moderator/Performers',
            {
                async: true,
                type: 'POST',
                data: { '_userId': obj.join, '_documentId': document_Id }
            });
            alert(obj + " ___ " + document_Id);
            $("#set-performer").dialog("close");
        });
    });
});

так вот как видно из рисунка данные считываются очень хорошо но во входных параметрах
public ActionResult Performers(string _userId, string _documentId) == NULL см картинку Подскажите что я делаю не так

p.S. Тестовая площадка (login == m, password == 10) krakoss.ru

Что заработало??? - Вы о чем - как нет записи данных в базу об исполнителях так и нет Оба поля имеют тип int обычный счётчик для таблицы

Answer 1

Надо его (метод join) вызвать:

data: { _userId: obj.join(","), _documentId: document_Id }

А также (http://api.jquery.com/val/):

var obj = $('.selectbox').val();

Помните ворону из мультфильма?

-Я наивная! Я доверчивая!

"... values ('" + _documentId.ToString() +

Update

Вас не настораживает появление большого красного прямоугольника с соoбщением об ошибке в верхней части страницы? И это в результате вызова $.ajax, который кроме посылания данных больше ничего не делает.

Поставьте type="button" кнопке id="btnSelected". У Вас по нажатию этой кнопки происходит submit формы, которая сама по себе не содержит элементов с нужными атрибутами name. Поэтому параметры в методе действия контроллера - без значений.

Зачем Вам там вообще форма?

READ ALSO
Обрезать строку в c#

Обрезать строку в c#

Есть строка:

310
Запуск программы под .net framework младшей версии

Запуск программы под .net framework младшей версии

скомпилировал проект подnet framework 4

202
Что такое &ldquo;стереотип&rdquo; в c#?

Что такое “стереотип” в c#?

К этому понятию относятся: классы, абстрактные классы, структуры

256
Выборка данных в Entity Framework

Выборка данных в Entity Framework

Я в программировании новичокПо metanit учился и учусь, itvdn, ulearn

210