在ASP.NET MVC Core 1.1应用程序中,跟随OrdersMain
View显示一个输入标签以添加一个订单,该标签下方显示所有现有订单的标签。视图上的Add Order
按钮调用以下操作方法AddOrder(...)
,它首先将订单添加到数据库,然后应该重定向到OrdersMain(...)
操作。但重定向部分不起作用。订单已成功添加到数据库中。但是OrdersMain
视图未刷新,因此添加订单后,新添加的订单未显示在OrdersMain
视图中。 问题:此处可能缺少的内容以及添加订单后如何使新订单显示在OrdersMain
视图中? 注意:我知道以上可以通过使用Form
和HttpPost
来实现。但我感兴趣的是使用AJAX
通话和HttpGet
当从AJAX调用主要操作时,RedirectToAction不起作用
OrdersMain.cshtml查看达到相同的:从动作OrdersMain调用]
@model MyProj.Models.MyViewModel
...
...
Add Order: <input ....../>
...
List of Existing Orders:
<div>...</div>
...
@section scripts
{
<script>
$(document).ready(function() {
$('.Addbtn').click(function() {
var newOrdVal = $('.txtAddRec').val();
$.ajax({
url: '@Url.Action("AddOrder", "ContrlName")',
data: { sNewOrdVal: newOrdVal },
contentType: 'application/json',
type: 'GET',
success: function(obj) {
alert('Suceeded');
},
error: function(obj) {
alert('Error occurred');
}
});
});
});
</script>
}
控制器:
[HttpGet]
public async Task<IActionResult> AddOrder(string sNewVal)
{
if (ModelState.IsValid)
{
try
{
ProdOrder oRac = new ProdOrder { orderName = sNewVal };
if (oRec != null)
{
_context.ProdOrder.Add(oRec);
await _context.SaveChangesAsync();
}
return RedirectToAction("OrdersMain"); //this should reload the page and will display the new value on the list of orders on the page
}
catch
{
return NotFound();
}
}
return RedirectToAction("OrdersMain");
}
我同意你的建议,因为用户可以立即看到他/她的更改:任何更新数据的方法都应该是POST。 – nam