C# 如果从另一个视图的ajax调用启动,则控制器不返回视图

C# 如果从另一个视图的ajax调用启动,则控制器不返回视图,c#,jquery,asp.net,ajax,asp.net-mvc,C#,Jquery,Asp.net,Ajax,Asp.net Mvc,目标 目前,我有一个计划,目标如下。程序加载一个包含X行的表,其中每行都有一个复选框,当我选择然后单击按钮时,字段中的值将写入结果视图中的一个字段。 示例:如果我有一个名为“Bob、John和Karen”的名称字段,如果我选中复选框1和3,则名称“Bob和Karen”将写入下一个视图中的新文本字段 我已经走了多远 到目前为止,我已经加载了我的表,当我选中复选框时,行ID被传递到一个控制器,在那里我可以看到,该控制器选择名称,并在每次迭代时将其写入一个新变量 问题 我面临的问题是,在所有这些结束时

目标

目前,我有一个计划,目标如下。程序加载一个包含X行的表,其中每行都有一个复选框,当我选择然后单击按钮时,字段中的值将写入结果视图中的一个字段。 示例:如果我有一个名为“Bob、John和Karen”的名称字段,如果我选中复选框1和3,则名称“Bob和Karen”将写入下一个视图中的新文本字段

我已经走了多远

到目前为止,我已经加载了我的表,当我选中复选框时,行ID被传递到一个控制器,在那里我可以看到,该控制器选择
名称
,并在每次迭代时将其写入一个新变量

问题

我面临的问题是,在所有这些结束时,当我尝试打开我的新视图时,尽管调用了该方法,但新视图不会加载到页面上,并且不会显示任何错误。 我怀疑这是因为我的ajax被用来调用控制器,并且没有success函数,但我不确定如何才能实现我想要的ajax。 参见代码

Tableview.cshtml
解释-基本上,这里发生的事情是,我获取已选中的每个复选框,并将其传递给Home controller中的selectMany函数。这个很好用。 `

家庭控制器-选择列表
说明-在这里,我获取Id,并为每个Id运行一个选择并获取名称字段。我想在这里完成的是,对于每个选中的复选框,我获取名称,并将其附加到一个
名称
中,然后在结果视图上加载该名称和两个
名称
,但在任何情况下我都不能让视图显示

    [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);
    }
选择many
解释——最后是最后一个函数,它只是一个返回视图

public ActionResult CreateMany()
{

return View();
}
如果能为我指明正确的方向,我将不胜感激

问候

编辑

`

@model IEnumerable
@{
ViewBag.Title=“活动”;
}
@**@
@*
*@
@*

@ActionLink(“添加新任务”、“创建”)

*@ 点击我! 打开 @**@ 挑选 @*@DisplayNameFor(model=>model.REF\u Projects.Project)*@ 任务 类型 离开 报告期 提交日期 提交人 细节 @foreach(模型中的var项目) { @*@DisplayFor(modeleItem=>item.REF\u Projects.Project)*@ @如果(item.proAct==“项目”) { @DisplayFor(modeleItem=>item.REF\u Projects.Project) } 其他的 { @DisplayFor(modelItem=>item.REF\u Activities.Activity) } @DisplayFor(modelItem=>item.proAct) @DisplayFor(modelItem=>item.REF\u Units.location) @Html.DisplayFor(modelItem=>item.reportPs)-@Html.DisplayFor(modelItem=>item.reportPe) @DisplayFor(modelItem=>item.enterDate) @Html.DisplayFor(modelItem=>item.USER\u users.fname)@Html.DisplayFor(modelItem=>item.USER\u users.lname) @**@查看详细信息 @*@ActionLink(“编辑”,“编辑”,新的{id=item.actID})| @ActionLink(“详细信息”,“详细信息”,新的{id=item.actID})| @ActionLink(“删除”,“删除”,新的{id=item.actID})*@ } var SaveList=函数(){ //警报(“此处”); var arrItem=[]; var commaseperatedIds= $(“#projectsTable tr td input[type=checkbox]”)。每个(函数(index,val){ 调试器 var checkId=$(val).attr(“Id”); var arr=支票ID.分割(“"”); var currentCheckboxId=arr[1]; var Ischecked=$(“#”+checkId).is(“:checked”,true); 如果(已检查){ arrItem.push(currentCheckboxId); } }) 如果(arrItem.length!=0){ CommaseOperateDids=arrItem.toString(); $.ajax({ url:“/Act/SelectList”, 类型:“POST”, 数据:{ItemList:CommaseOperateDids}, 成功:功能(响应){ //代码在这里 } }) } }

`

如果我理解正确,您只需发布到主页/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>

有点困惑,如果您想返回一个视图而不是使用相同的页面,为什么不使用与选择列表页面相同的逻辑将原始表单发布到该页面?我看不出您当前的问题需要ajax。您为什么要尝试使用ajax?你正在从一个视图转到另一个视图。因此,只需发送到您的控制器。填充您的viewbag或model并返回另一个视图
如果我选中复选框1和3,Bob和Karen的名字将写入下一个视图中我的新文本字段。
只需使用表单post即可。ajax的目的不是刷新页面。您的目标似乎是要重定向它们。@BryanDellinger好吧,我在选中复选框1和2并获得记录ID后,必须返回控制器,根据记录ID协调学生1和学生2的5个字段
@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>
<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>
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   
}