如何在页面更改之间保存数据而不发布(MVC 5)?

时间:2014-01-30 16:40:15

标签: javascript jquery ajax asp.net-mvc

当用户返回具有数据输入表单的页面时,我正在使用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;

1 个答案:

答案 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 
    }
}