Код 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 обычный счётчик для таблицы
Надо его (метод 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
. Поэтому параметры в методе действия контроллера - без значений.
Зачем Вам там вообще форма?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я в программировании новичокПо metanit учился и учусь, itvdn, ulearn