Bootstrap

jquery ajax不进action,jquery - 从AJAX调用主要动作时,RedirectToAction不起作用 - 堆栈内存溢出...

当您使用ajax表单提交时,返回重定向响应没有任何意义。 当您进行常规表单提交时,重定向响应(302响应)很有用。

我还建议将您的操作方法设为Httppost操作。 任何更新数据的方法都应该是POST。

您几乎没有其他方法可以解决页面刷新问题。

1.完成ajax调用后,对清单进行部分页面更新

通过这种方法,您可以为页面中已经存在的项目列表加标记,以使其反映新的数据集。 您可以通过多种方式执行此操作。 一种是简单地进行ajax调用,以再次获取所有项目的html标记,并更新保存项目列表的容器。 另一个选择是让您的操作方法返回新的单个项目所需的标记,并使用jQuery append()方法将其追加到现有列表中。

下面的示例返回一个JSON响应,其中保存了新项目的ID,我们将再次调用ajax来获取该项目。

$(document).ready(function() {

$('.Addbtn').click(function (e) {

e.preventDefault();

var newOrdVal = $('.txtAddRec').val();

$.ajax({

url: '@Url.Action("AddOrder", "Home")',

data: { sNewVal: newOrdVal },

type:'POST'

}).done(function(res) {

if (res.status === "success") {

$.get("@Url.Action("GetItem")?id=" + res.newItemId, function(newItem) {

$("#listContainer").append(newItem);

});

}

}).fail(function(a, b, c) {

console.log('ajax call failed');

});

});

});

假设您的AddOrder操作方法返回一个带有新Item ID的json响应,并且您有一个Get GetItem ,它获取该操作ID并返回列表中新项目所需的标记。

[HttpPost]

public async Task AddOrder(string sNewVal)

{

ProdOrder oRac = new ProdOrder { orderName = sNewVal };

_context.ProdOrder.Add(oRec);

await _context.SaveChangesAsync();

return Json(new {status = "success", newItemId = oRec.Id});

}

public ActionResult GetItem(int id)

{

var t=db.ProdOrder.Find(id);

//I am simply returning the orderName wrapped in p tag.

// You may change this to call a Partial view

// which returns the markup for the single item

return Content("

" + t.orderName + "

");

}

2.重新加载页面

您可以在ajax调用的成功处理程序中使用javascript重新加载页面。

$.ajax({

// your ajax params

}).done(function(res){

window.location.href = window.location.href;

}).fail(function(a, b, c) {

console.log('ajax call failed');

});

我不希望重新加载页面。 因为这完全违反了我使用ajax表单发布的目的。

如果您使用诸如angular的前端MV *框架,您要做的就是从数据源(可能是数组)中删除用于渲染列表中项目的项目。

;