通过多个表单 POST 持久保存数据

本文关键字:保存 数据 POST 表单 | 更新日期: 2023-09-27 18:34:42

我想知道在MVC中解决这个问题的最佳方法是什么 ASP.NET。以下是我希望能够执行的操作的简单示例:

我有一个带有文本框和提交按钮的网页。按下提交按钮时,我希望内容显示在同一网页上。当再次按下它时,我希望显示第一次提交时已经显示的内容以及刚刚提交的新数据。

我尝试将此数据保存到模型中,但是每次表单发布时都会擦除模型。我该如何做到这一点并保留最后一个帖子(以及之前的帖子(之前帖子中的数据?

通过多个表单 POST 持久保存数据

如果您希望数据在请求之间持久存在,作为起点,我会使用"TempData"。属性值存储在会话状态中,在读取或会话过期之前一直存在。

示例视图模型:

    public class SomeClass
    {
        public string Something { get; set; }
        public List<string> RetainedValues { get; set; } 
    }

示例控制器:

    [HttpGet]
    public ActionResult Index()
    {
        return View("Index");
    }
    [HttpPost]
    public ActionResult Index(SomeClass postedValues)
    {
        // retrieve retained values
        var retained = (List<string>) TempData["RetainedValues"] ?? new List<string>();
        retained.Add(postedValues.Something);
        // save for next post
        TempData["RetainedValues"] = retained;
        // setup viewmodel
        var model = new SomeClass
        {
            RetainedValues = retained
        };
        return View("Index", model);
    }

示例视图(强类型(:

    <div>
        @foreach(var item in Model.RetainedValues)
        {
            <div>@item</div>
        }
    </div>
    @using(Html.BeginForm())
    {
        @Html.EditorFor(m=>m.Something)
        <input type="submit"/>
    }

只需为您的模型属性放置一个隐藏字段,您的预览值就会加载到该字段上并将其传递回下一篇文章。

例如:@Html.HiddenFor(model => model.YourProperty)

因此,知道您可以有两个属性,例如:一个名为newValue,另一个称为allValues。

所有值,你用

它和一个隐藏字段,你的新值,你用来插入新值。因此,在发布时,您只需将newValue添加到allValues中即可。

像这样: model.allValues += newValue;

-

-更新

或者,您可以使用@Jesse提到的会话或临时数据

对于这种情况,我更喜欢使用隐藏字段,因为它的复杂性较低,并且其数据不需要安全,因为它无论如何都会显示给用户。