2014-01-30 30 views
-2

我正在使用Session变量在用户返回到具有数据输入表单的页面时保留数据。在用户提交表单后,存储会话数据值在控制器中完成。这工作正常,但问题是,如果用户更改页面而不先发布表单,则所有数据都消失了。如何在这种情况下存储数据?可能我需要一个JavaScript来调用控制器中的Action,并通过Ajax调用传递数据以保存数据?有没有可能举一个例子来说明如何做到这一点?此外,应该在什么情况下调用?我对JavaScript很陌生,所以任何细节都很重要。贝娄是代码的一部分:(为简单起见,我省略了额外的代码,测试空,等...)如何在没有发布的页面更改之间保存数据(MVC 5)?

// 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

为什么要后端ASP.NET MVC控制器去做这个?为什么不使用框架如何使用? –

+1

在“用户体验”方面,我认为最好的办法是在离开时警告用户,而不是强制保存表单......有点像SO,如果你在编辑中断,你会失去它。另一个想法是使用cookie,客户端,所有的JS。 – Tallmaris

+0

@Jason:我不知道框架是如何使用的。我所知道的是,在我看到的大多数表单中,数据在页面更改之间保持不变。 –

回答

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> 

注:不是演示“正确的方式”。它只是展示了一个快速和肮脏的解决方案发送的形式后端,上的数据,当用户离开页面

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 
    } 
} 
相关问题