将数据从一个表单传递到同一视图中的另一个表单的操作方法

时间:2018-05-22 19:26:36

标签: c# asp.net-mvc

我有一个名为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();
}

1 个答案:

答案 0 :(得分:0)

每个请求(获取/放置/发布)完全独立于下一个请求(假设您的代码在服务器群集上运行),所以只是因为您在本地保留了一些数据,它就是&#39; ;在下次调用服务器(或集群中的其他服务器之一)时不会存在。特定的TempData实例仅在“帐户设置”的持续时间内存在。

如果您想在CreateAccount的视图模型中使用某些内容,则需要在视图中使用@ Html.HiddenFor之类的内容。

实际上,您可能只想存储可能的帐户ID&#39;在视图中并重新加载数据库中的实际数据,因为您不想相信&#39;客户端发送给您的任何内容,因为任何黑客都可以将他们需要的任何数据传递给您的服务器,因此您必须验证所有内容。