【问题标题】:How to save data between page changes without posting (MVC 5)?如何在页面更改之间保存数据而不发布(MVC 5)?
【发布时间】:2014-02-23 02:20:41
【问题描述】:

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

【问题讨论】:

  • 您为什么要这样做?为什么不按照它的用途使用框架?
  • 就“用户体验”而言,我相信最好的方法是在离开时警告用户,而不是强制保存表单……有点像 SO,如果你在在编辑过程中你会丢失它。另一个想法是使用cookie,客户端,所有JS。
  • @Jason:我不知道该框架的用途。我所知道的是,在我看到的大多数表单中,数据在页面更改之间保持不变。
  • @Tallmaris 也许您的应用程序更复杂。我的是一种SPA。如果用户正在填写搜索查询,但只需要在提交页面之前在“联系方式”页面中看到公司地址,则提示用户不太好。
  • 看看the last answer here 它演示了如何使用文本框模糊事件来调用javascript函数。在您的情况下,您可能希望调用一个 ajax 方法,然后填充您的服务器端会话变量。

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:
<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 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2012-05-26
    • 2018-06-26
    • 2010-10-26
    相关资源
    最近更新 更多