c# - 如果从另一个视图的 ajax 调用启动,控制器不会返回视图
问题描述
目标
目前,我有一个具有以下目标的程序。该程序加载一个包含 X 行的表,其中每一行都有一个复选框,当我选择然后单击一个按钮时,字段中的值将写入结果视图中的一个字段。例如,如果我有一个名称字段Bob, John and Karen
,如果我选择复选框 1 和 3,则名称Bob and Karen
将写入下一个视图中的新文本字段。
我已经走了多远
到目前为止,我已经加载了我的表,当我选择复选框时,行 ID 被传递到一个控制器,在那里我可以查看它选择name
并在每次迭代时将其写入一个新变量。
问题
我面临的问题是,在这一切结束时,当我尝试打开我的新视图时,尽管调用了该方法,但新视图没有加载到页面上并且没有显示错误。我怀疑这是因为我的 ajax 被用来调用控制器并且没有 sucess 功能,但我不确定如何做我想做的 ajax。见代码。
Tableview.cshtml
解释- 基本上这里发生的事情是,我得到每个已选中的复选框,并将其传递给 Home 控制器中的 selectMany 函数。这工作正常。`
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
说明- 在这里,我得到了 ID,对于每个 ID,我运行一个选择并获取名称字段。我在这里要完成的是,对于每个选中的复选框,我取名称,并将其附加到一个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" /> </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>
`
解决方案
如果我正确理解这一点,您只需要发布到 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>
在表单中添加您想要的任何其他内容后,您可以转到控制器进行 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
}
推荐阅读
- java - Android Studio 错误:“仅从 Android O 开始支持调用自定义”
- amazon-web-services - 当使用 Async / Await 从 DynamoDB 检索数据时,Lambda 函数未调用 Https.request 函数
- angular - 过滤订阅多个输出(推送到几个数组)
- highcharts - Highcharts 7.1.1版如何使用amd模块离线导出PDF
- c# - SecureString 的替代品?
- database - 为法律构建 SQL 数据库
- php - WooCommerce 扩展 - 在网关回调处理程序中重定向用户
- node.js - 如何使用开始日期和结束日期定义 CloudWatch 事件率表达式
- ios - CoreStore transaction.edit 建议使用相同变量名的注释可以防止我们误用非事务实例
- c# - asp.net core mvc:将托管和业务逻辑/用户界面拆分为单独的项目