我有一个名为AccountSetup.cshtml
的打字视图,有两种形式:
@model ViewModel
@using (Html.BeginForm())
{
// input form stuff
<input type="submit" id="Submit"" />
}
@using (Html.BeginForm())
{
// other input form stuff
<input type="button" onclick="location.href='@Url.Action("CreateAccount", "AccountSetup")'" />
}
第一个表单将数据发送到此post方法,并且工作正常。但是,当我提交进入Get方法的第二个表单时,我丢失了模型数据。 TempData.Keep
不会将所有帖子的所有数据保留回控制器吗?
[HttpPost]
public ActionResult AccountSetup(ViewModel AccountInfo)
{
TempData["AccountInfo"] = AccountInfo;
// writing to database
TempData.Keep("AccountInfo");
return View(AccountInfo);
}
[HttpGet]
public ActionResult CreateAccount(ViewModel AccountInfo)
{
if (TempData["AccountInfo"] != null)
{
// functionality
var data = TempData["AccountInfo"] as ViewModel
}
return View();
}
答案 0 :(得分:0)
每个请求(获取/放置/发布)完全独立于下一个请求(假设您的代码在服务器群集上运行),所以只是因为您在本地保留了一些数据,它就是&#39; ;在下次调用服务器(或集群中的其他服务器之一)时不会存在。特定的TempData实例仅在“帐户设置”的持续时间内存在。
如果您想在CreateAccount的视图模型中使用某些内容,则需要在视图中使用@ Html.HiddenFor之类的内容。
实际上,您可能只想存储可能的帐户ID&#39;在视图中并重新加载数据库中的实际数据,因为您不想相信&#39;客户端发送给您的任何内容,因为任何黑客都可以将他们需要的任何数据传递给您的服务器,因此您必须验证所有内容。