在ASPMVC中,我应该如何为带有确认页面的注册过程构建控制器



我还是ASP MVC 4的新手,我需要一些帮助来设计我的控制器,用于带有确认页面的基本注册场景。

我有一个表单,用户在其中输入一些个人信息,并使用验证属性进行一些模型验证。在提交此表单时,我需要调用我的数据层进行更复杂的验证,然后重定向到显示给用户输入的确认,以便他可以验证所有内容。因此,只有在提交此确认表单时,才会在数据库中执行创建操作。

我读到关于PRG模式(后重定向获取),我有点困惑,因为我不希望任何个人数据出现在注册和确认表之间的URL中。

我希望我对自己的处境解释得足够清楚。。

这是一个非常基本的场景,我们几乎到处都能看到,所以我希望在某个地方找到exmaples,但我找不到任何关于它的文章或教程。

提前感谢!

我会构建如下所示的控制器类。。我将使用会话来存储用户信息,并将其发送到确认页面,但如果从安全角度来看可以的话,您可以选择任何其他方式,比如cookie

Public class RegistrationController:Controller
{
[HttpGet]
public FillInformation()
{
...
Return view();
}
[HttpPost]
public FillInformation(UserInformation UserInformation)
{
if (ModelState.IsValid)
{
//do some further validation here and if succeed then save to session
Session["info"] = UserInformation;
return RedirectToAction("Confirmation");
}
Return view(UserInformation);
}
[HttpGet]
public Confirmation()
{
// get object from session
UserInformation info = Session["info"]
Return view(info);
}
[HttpPost]
public Confirmation()
{
// get object from session
UserInformation info = Session["info"]
//Save data to database here
}
}

另外,由于您使用的是MVC 4,因此另一种方法是通过实现WEB API服务来使用服务调用。

您可以使用此模式。虽然名称是Post-Get-Redirect,但用户第一次将通过在浏览器中键入来获取登录页面。服务器将发送一个空表单作为答复。一旦用户在浏览器上有了表单,您就进入了PRG:的POST步骤

  • POST:用户填写表单并提交(当客户端验证成功时)。当服务器获取数据时,它可以进行服务器端验证。如果服务器端验证失败,服务器会将表单发送回用户,以便他可以重试。服务器和用户将多次交换表单,直到服务器验证合格

  • REDIRECT:一旦服务器端验证正常,服务器就会注册用户,并向浏览器发送重定向(HTTP 301或302),其中包括浏览器必须加载的新URL。

  • GET:当浏览器从服务器接收到重定向时,它会发出新URL的GET。

重定向url通常会显示下一步或确认页面。在这种情况下,它可能是一个"注册成功"页面。

PRG模式的优点是刷新浏览器(重新加载页面)不会产生不希望的副作用(比如在本示例中注册用户两次):

  • 如果用户在POST步骤中刷新浏览器,则表单会被发送回服务器。但是用户只能在POST步骤中(因此,还没有注册)时进行此操作

  • 一旦用户注册,浏览器就会使用GET重定向到一个新页面。因此,如果用户刷新浏览器,他会重复GET,而服务器端不会发生任何事情。

I.e,如果您正确地实现了这种模式,服务器将只对POST请求执行操作(如注册用户)。在GET请求中,应用程序应该只向用户显示数据,而不进行任何更改。

顺便说一下,所有的个人数据将在第一步(POST)中发布到服务器。REDIRECT和GET步骤中使用的URL没有任何个人信息URL。要做到这一点,一旦用户注册/验证,您通常会在会话中存储必要的个人数据。

您可以在服务器验证后将用户数据存储在会话中。然后在确认页面上为用户显示所有内容。最后将所有内容存储在数据库中。

另一种可能性是将其存储在TempData中。它基本上是一个会话变量,只持续到下一个请求。然而,这意味着如果在页面上刷新,数据就会丢失。

最新更新