当用户返回具有数据输入表单的页面时,我正在使用Session变量来保存数据。在用户提交表单后,在控制器中完成存储会话数据值。这工作正常,但问题是如果用户更改页面而不先发布表单,则所有数据都将消失。如何在这种情况下存储数据?可能我需要一个JavaScript来调用控制器中的Action并传递要通过Ajax调用保存的数据?是否有可能有一个如何做到这一点的例子?在什么情况下,这应该被称为?我对JavaScript很新,所以任何细节都很重要。 Bellow是代码的一部分:(为简单起见,我省略了测试null等的其他代码......)
// View
<div class="row">
<div class="col-sm-3" style="background-color:peachpuff">
@{Html.RenderPartial("~/Views/Shared/ReservSearch.cshtml", Session["ReservSearchModel"] as Models.ReservSearch);}
</div>
// Controller
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetRates([Bind(Include = "DropOffLoc,DropOffDate,PickUpDate")] ReservSearch reservSearch)
{
Session["ReservSearchModel"] = reservSearch;
答案 0 :(得分:0)
<script language="JavaScript">
window.onbeforeunload = savedata;
function savedata()
{
var formElement = document.getElementById("myFormElement");
var request = new XMLHttpRequest();
request.open("POST", "MyController/MyAction");
request.send(new FormData(formElement));
}
</script>
注意: 不演示“正确方法”。它只是演示了一个快速而肮脏的解决方案,用于在用户离开页面时将表单上的数据发送到后端
后端ASP.NET MVC控制器
public class MyController: Controller
{
public void MyAction(FormCollection formCollection)
{
//find your form elements and their value in this formCollection collection
//and process them as required
}
}