我想知道在 ASP.NET MVC 中解决这个问题的最佳方法是什么。以下是我想要做的一个简单的例子:
我有一个带有文本框和提交按钮的网页。当按下提交按钮时,我希望内容显示在同一网页上。当再次按下它时,我希望显示第一次提交时已经显示的内容以及刚刚提交的新数据。
我曾尝试将这些数据保存到模型中,但每次表单发布时模型都会被擦除干净。我怎样才能做到这一点,并在最后一个帖子(以及之前的帖子)之前保留帖子中的数据?
我想知道在 ASP.NET MVC 中解决这个问题的最佳方法是什么。以下是我想要做的一个简单的例子:
我有一个带有文本框和提交按钮的网页。当按下提交按钮时,我希望内容显示在同一网页上。当再次按下它时,我希望显示第一次提交时已经显示的内容以及刚刚提交的新数据。
我曾尝试将这些数据保存到模型中,但每次表单发布时模型都会被擦除干净。我怎样才能做到这一点,并在最后一个帖子(以及之前的帖子)之前保留帖子中的数据?
如果您希望数据在请求之间保持不变,我将使用“TempData”作为起点。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。
您将其与隐藏字段一起使用的 allValues 以及用于插入新字段的 newValue。因此,在发布后,您只需将 newValue 添加到 allValues。
类似的东西:model.allValues += newValue;
--更新
或者您可以使用@Jesse 提到的会话或临时数据
对于这种情况,我更喜欢使用隐藏字段,因为它的复杂性较低,并且它的数据不需要安全,因为它无论如何都会显示给用户。