ASP.NET MVC Core 1.1アプリケーションでは、OrdersMain
ビューに続いて、入力タグが表示され、そのタグの下に、既存のすべての注文のリストが表示されます。ビューのAdd Order
ボタンをクリックすると、次のアクションメソッドAddOrder(...)
が呼び出され、最初に注文がデータベースに追加され、OrdersMain(...)
アクションにリダイレクトされます。しかし、リダイレクト部分は機能しません。注文は正常にデータベースに追加されます。ただし、OrdersMain
ビューは更新されていないため、追加された直後に新たに追加されたオーダーはOrdersMain
ビューに表示されません。 質問:ここで紛失している可能性があり、注文が追加された後にOrdersMain
ビューに新しい注文を表示させる方法はありますか? 注::私はForm
とHttpPost
を使用することで上記が達成できることを知っています。しかし、私はAJAX
コールを使用して同じことを達成することに興味があるとHttpGet
メインアクションがAJAXから呼び出されたときにリダイレクトToActionが機能しない
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