当您使用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 *框架,您要做的就是从数据源(可能是数组)中删除用于渲染列表中项目的项目。