Контроллер не возвращает представление, если инициировано из ajax вызова из другого представления - PullRequest
0 голосов
/ 18 марта 2020

Цель

В настоящее время у меня есть программа со следующей целью. Программа загружает таблицу с X строками, где у каждой строки есть флажок, и когда я выбираю и нажимаю кнопку, значение в полях записывается в одно поле в результирующем представлении. Например, если у меня есть поле имени с именами Bob, John and Karen, если я установлю флажки 1 и 3, имена Bob and Karen будут записаны в мое новое текстовое поле в следующем представлении.

Как далеко Я получил

Пока у меня загружена таблица, и когда я выбираю флажок, идентификатор строки передается контроллеру, где я смотрю, который выбирает name и записывает его в новая переменная на каждой итерации.

Проблема

Проблема, с которой я сталкиваюсь, заключается в том, что в конце всего этого, когда я пытаюсь открыть свой новый вид, несмотря на вызываемый метод новый вид не загружается на страницу, и не отображается никаких ошибок. Я подозреваю, что это из-за того, что мой ajax используется для вызова контроллера, и нет функции sucess, но я не уверен, как я могу сделать то, что я хочу ajax. См. Код.

Tableview.cshtml Объяснение - В основном здесь происходит то, что я получаю каждый флажок, который был отмечен, и передаю его функции selectMany в контроллере Home. Это отлично работает. `

var SaveList = function () {
  //  alert("Here");
    var arrItem = [];
    var commaseperatedIds =

        $("#projectsTable tr td input[type=checkbox]").each(function (index, val) {

            debugger
            var checkId = $(val).attr("Id");
            var arr = checkId.split('_');
            var currentCheckboxId = arr[1];

            var Ischecked= $("#" + checkId).is(":checked", true);

            if (Ischecked) {
                arrItem.push(currentCheckboxId);
            }

        })
    if (arrItem.length != 0) {

        commaseperatedIds = arrItem.toString();
        $.ajax({
            url:"/Home/SelectList",
            type: "POST",
            data: { ItemList: commaseperatedIds },
            sucess: function (response) {
                //Code here
            }
        })
    }

}

Home Controller- SelectList Объяснение - Здесь я получаю идентификаторы, и для каждого идентификатора я запускаю выбор и беру поле имени. Вот что я хочу сделать sh: для каждого отмеченного флажка я беру имя и добавляю его в один name, и я получаю это имя с обоими names в полученном представлении, но ни при каких обстоятельствах я не могу получить вид, чтобы показать.

    [HttpPost]
    //    public JsonResult SelectList(string ItemList)
    public ActionResult SelectList(string ItemList)
    {
        string[]arr = ItemList.Split(',');
        string name;
        foreach(var id in arr)
        {
            var currentId = id;

            var Report = from t in db.classList
                         select new
                         {
                             t.name
                         };

            name = Report.Select(e => e.name).FirstOrDefault();
        }
        //     return RedirectToAction("CreateMany");
        //     return View("CreateMany");
        return View("/Home/CreateMany");
        //      return Json("", JsonRequestBehavior.AllowGet);
    }

SelectMany Объяснение - и, наконец, последняя функция, которая является просто возвращаемым видом.

public ActionResult CreateMany()
{

return View();
}

Благодарен, если бы меня указали справа направление.

С уважением

РЕДАКТИРОВАТЬ

`

@model IEnumerable<Generator.Models.ACT_activitiesDescr>

@{
    ViewBag.Title = "Activities";
}
<head>
    <link href="//cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css" rel="stylesheet" type="text/css" />
    <script src="//cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
</head>
@*<link href="@Url.Content("~/Scripts/datatables/jquery.dataTables.min.css")" rel="stylesheet" type="text/css" />*@
@*<!-- Page JS Plugins -->
    <script src="~/Scripts/datatables/jquery.dataTables.min.js"></script>

    <!-- Page JS Code -->
    <script src="~/Scripts/datatables/base_tables_datatables.js"></script>*@

<h3><u>  </u></h3>

@*<p style="font-size:25px">
    @Html.ActionLink("Add New Task", "Create")
</p>*@
<button type="button" class="button" id="button">Click Me!</button>
<a class="btn btn-success btn-block" onclick="SaveList()"> Open</a>
<table id="projectsTable" class="display table table-bordered table-primary ">
@*<table id="projectsTable" class="display" style="width:100%">*@
    <thead>
        <tr>
            <th>
                Select
            </th>
            <th>
                @*@Html.DisplayNameFor(model => model.REF_Projects.Project)*@
                Task
            </th>
            <th>
                Type
            </th>
            <th>
                Depart
            </th>
            <th>
                Report Period
            </th>
            <th>
                Submission Date
            </th>
            <th>Submitted By</th>
            <th>Details</th>

        </tr>
    </thead>
    @foreach (var item in Model)
    {
        <tr style="color:black;">
            <td><input type="checkbox" id="Check_@item.actID" name="check_@item.actID" />&nbsp;</td>
            <td>
                @*@Html.DisplayFor(modelItem => item.REF_Projects.Project)*@
                @if (item.proAct == "Project")
                {
                    @Html.DisplayFor(modelItem => item.REF_Projects.Project)
                }
                else
                {
                    @Html.DisplayFor(modelItem => item.REF_Activities.Activity)
                }
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.proAct)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.REF_Units.location)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.reportPs) - @Html.DisplayFor(modelItem => item.reportPe)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.enterDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.USER_users.fname) @Html.DisplayFor(modelItem => item.USER_users.lname)
            </td>

            <td>
                <button class="btn btn-sm btn-default" type="button" onclick="location.href='@Url.Action("Edit", "Act", new { id = item.actID  })'" data-toggle="tooltip" title="Details">@*<i class="fa fa-list-ol"></i>*@View Details</button>
                @*@Html.ActionLink("Edit", "Edit", new { id = item.actID }) |
                    @Html.ActionLink("Details", "Details", new { id = item.actID }) |
                    @Html.ActionLink("Delete", "Delete", new { id = item.actID })*@
            </td>
        </tr>
    }

</table>
<script>

    var SaveList = function () {
      //  alert("Here");
        var arrItem = [];
        var commaseperatedIds =

            $("#projectsTable tr td input[type=checkbox]").each(function (index, val) {

                debugger
                var checkId = $(val).attr("Id");
                var arr = checkId.split('_');
                var currentCheckboxId = arr[1];

                var Ischecked= $("#" + checkId).is(":checked", true);

                if (Ischecked) {
                    arrItem.push(currentCheckboxId);
                }

            })
        if (arrItem.length != 0) {

            commaseperatedIds = arrItem.toString();
            $.ajax({
                url:"/Act/SelectList",
                type: "POST",
                data: { ItemList: commaseperatedIds },
                sucess: function (response) {
                    //Code here
                }
            })
        }

    }
</script>

`

1 Ответ

1 голос
/ 20 марта 2020

Если я правильно понимаю, вам просто нужно опубликовать на странице, где логины c ins в home / createmany?

Вам не нужно ajax, просто форма

<form action="/form/createMany" method=""Post" >
 <!-- you need your check boxes, keep them all the same name -->     
 <input type="checkbox" name="MyChecks" value="Bob" /> Bob<br/>
 <input type="checkbox" name="MyChecks" value="Karen" />Karen</br> 
  ... 
 <!-- then your submit -->
 <input type="submit" name="SUB" value="CREATE MANY" />
</form>

После того, как вы добавите в форму все, что захотите, вы можете go в контроллере для createmany. Вы можете использовать значение кнопки отправки для обработки, только если данные передаются из этой формы

string fromForm = Request.Form["SUB"];
if(fromForm == "CREATE MANY"){
    string names = Request.Form["MyChecks"];  //should return selected as CSV
    string[] myArr = names.Split(',');
    // add your logic here from your ajax call   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...