C# 如果从另一个视图的ajax调用启动,则控制器不返回视图
目标 目前,我有一个计划,目标如下。程序加载一个包含X行的表,其中每行都有一个复选框,当我选择然后单击按钮时,字段中的值将写入结果视图中的一个字段。 示例:如果我有一个名为“Bob、John和Karen”的名称字段,如果我选中复选框1和3,则名称“Bob和Karen”将写入下一个视图中的新文本字段 我已经走了多远 到目前为止,我已经加载了我的表,当我选中复选框时,行ID被传递到一个控制器,在那里我可以看到,该控制器选择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被传递到一个控制器,在那里我可以看到,该控制器选择名称,并在每次迭代时将其写入一个新变量 问题 我面临的问题是,在所有这些结束时
名称
,并在每次迭代时将其写入一个新变量
问题
我面临的问题是,在所有这些结束时,当我尝试打开我的新视图时,尽管调用了该方法,但新视图不会加载到页面上,并且不会显示任何错误。
我怀疑这是因为我的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" /> </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
}