[英]After jQuery Ajax invocation call , the application Fails to navigate to the ASP.NET MVC view that I want to show
我正在使用jquery DataTables显示一些表格数据,并且还在上述jquery DataTables中为每一行放置了一个编辑链接,以便用户可以根据需要编辑与特定行关联的数据。 (此外,我不知道如何在jQuery DataTables中使用ASP.NET MVC Html帮助器,因此这就是为什么我在以下代码中使用html链接的原因)
jQuery DataTable JavaScript:
$("#resultCodeTable").dataTable({
"processing": true,
"serverSide": false,
"destroy": shouldDestroy,
"ajax": {
"url": "../Admin/LoadResultCodes",
"type": "GET",
"datatype": "json",
"data": function (data) {
data.actionCodeIDArg = actionCodeIDInQuestion;
}
},
....................................
............................
..............
columnDefs: [
{
{
targets: 1,
searchable: false,
orderable: false,
name: "EditResultCodeInQuestionReasonForArrears",
"data": "ID",
render: function (data, type, full, meta) {
if (type === 'display') {
data = '<a class="editResultCodeInQuestionReasonForArrears" href="javascript:void(0)" data-id="' + full.ID + '">Edit RFAs</a>'
}
return data;
}
},
....................................
............................
..............
单击上述链接将确保执行点到达以下jQuery Event Handler方法:
jQuery事件处理程序方法/函数Javascript
$('#resultCodeTable').on('click', '.editResultCodeInQuestionReasonForArrears', function () {
console.log(this.value);
navigateToAParticularResultCodeAssociatedReasonForArrearsList($(this).data('id'));
});
jQuery Ajax调用成功调用了C#Controller的动作,因为我看到Visual Studio的Debugger的执行点达到了所说Controller的动作,但是,它无法导航到我要显示的视图。
jQuery / JavaScript:
function navigateToAParticularResultCodeAssociatedReasonForArrearsList(resultCodeTable_ID) {
console.log(resultCodeTable_ID);
$.ajax({
url: '../Admin/NavigateToAParticularResultCodeAssociatedReasonForArrearsList',
type: 'POST',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: "{'" + "resultCodeTable_IDArg':'" + resultCodeTable_ID + "'}",
cache: false,
}).done(function (response, status, jqxhr) {
})
.fail(function (jqxhr, status, error) {
// this is the ""error"" callback
});
}
C#:(在我的AdminController.cs中)
public ActionResult NavigateToAParticularResultCodeAssociatedReasonForArrearsList(int resultCodeTable_IDArg)
{
AParticularResultCodeAssociatedReasonForArrearsListViewModel aParticularResultCodeAssociatedReasonForArrearsListViewModel = new AParticularResultCodeAssociatedReasonForArrearsListViewModel();
aParticularResultCodeAssociatedReasonForArrearsListViewModel.ResultCodeTable_ID = resultCodeTable_IDArg;
return View("~/Areas/Admin/Views/Admin/AdminModules/Auxiliaries/AParticularResultCodeAssociatedReasonForArrearsList.cshtml", aParticularResultCodeAssociatedReasonForArrearsListViewModel);
}
剃刀/ HTML:(在我的\\ Areas \\ Admin \\ Views \\ Admin \\ AdminModules \\ Auxiliaries \\ AParticularResultCodeAssociatedReasonForArrearsList.cshtml视图中)
@model Trilogy.Areas.Admin.ViewModels.Auxiliaries.AParticularResultCodeAssociatedReasonForArrearsListViewModel
@{
ViewBag.Title = "AParticularResultCodeAssociatedReasonForArrearsList";
}
<h2>AParticularResultCodeAssociatedReasonForArrearsList</h2>
有人可以告诉我如何更改代码,以便在调用jQuery Ajax之后显示视图吗?
可能在.done函数上,您将在响应中获取视图,您需要获取该响应并将其绑定到控件
您通过AJAX调用控制器,并确保它命中了控制器操作方法,并且控制器返回了一个视图,但这是您的代码,用于处理从AJAX调用(从控制器)返回的任何内容:
.done(function (response, status, jqxhr) {})
您绝对什么也没做,所以为什么要导航到任何地方。
您需要问自己一个更好的问题,而不是解决此问题,是为什么要使用AJAX然后导航到另一个页面。 如果要导航到新页面,新URL,则只需定期提交表单(不使用AJAX)或通过链接(用户将点击链接)进行提交。 如果您想停留在同一页面上并刷新页面内容,请使用AJAX发布。
@ yas-ikeda,@codingyoshi,@ code-first谢谢您的建议。
这是我为解决问题而必须进行的修改(请随时提出改进建议):
基本上,我必须最终创建2个单独的Action方法来解决该问题。 在下面的jquery / Javascript代码中,重要的是要注意第一个操作方法'../Admin/RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList'
function navigateToAParticularResultCodeAssociatedReasonForArrearsList(resultCodeTable_ID) {
console.log(resultCodeTable_ID);
$.ajax({
url: '../Admin/RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList',
type: 'POST',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: "{'" + "resultCodeTable_IDArg':'" + resultCodeTable_ID + "'}",
cache: false,
}).done(function (response, status, jqxhr) {
window.location.href = response.Url;
})
.fail(function (jqxhr, status, error) {
// this is the ""error"" callback
});
}
名为“ ../Admin/RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList”的第一个操作方法的目的是检索Json对象中的URL。
[HttpPost]
public ActionResult RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList(int resultCodeTable_IDArg)
{
var redirectUrl = new UrlHelper(Request.RequestContext).Action("NavigateToAParticularResultCodeAssociatedReasonForArrearsList", "Admin", new { resultCodeTable_IDArg = resultCodeTable_IDArg });
return Json(new { Url = redirectUrl });
}
第二种操作方法的目的是最终导航到我要显示的ASP.NET MVC视图。
public ActionResult NavigateToAParticularResultCodeAssociatedReasonForArrearsList(int resultCodeTable_IDArg)
{
AParticularResultCodeAssociatedReasonForArrearsListViewModel aParticularResultCodeAssociatedReasonForArrearsListViewModel = new AParticularResultCodeAssociatedReasonForArrearsListViewModel();
aParticularResultCodeAssociatedReasonForArrearsListViewModel.ResultCodeTable_ID = resultCodeTable_IDArg;
aParticularResultCodeAssociatedReasonForArrearsListViewModel.RFACodeList = actionCodeResultCodeBusinessService.GetSpecificResultCodeRFACodeList(resultCodeTable_IDArg);
return View("~/Areas/Admin/Views/Admin/AdminModules/Auxiliaries/AParticularResultCodeAssociatedReasonForArrearsList.cshtml", aParticularResultCodeAssociatedReasonForArrearsListViewModel);
}
但是,我不喜欢必须使用2种操作方法才能导航到所需的asp.net mvc视图这一事实,因此,请随时提出改进建议,甚至是完全不同的更好解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.