Asp.net mvc 3 Razor:隐藏密码控制(2页注册)

Asp.net mvc 3 Razor:隐藏密码控制(2页注册),asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我正在razor中创建一个2页的注册过程。这里的困难在于在第一个页面上收集数据(用户名、密码等),并使用隐藏的输入变量在第二个页面上存储第一个页面的数据 这是我的隐藏代码: <div id="hidden vals" style="display:none;"> @Html.HiddenFor(model => model.userRegisterModel.UserName) @Html.HiddenFor(model => model.userRegi

我正在razor中创建一个2页的注册过程。这里的困难在于在第一个页面上收集数据(用户名、密码等),并使用隐藏的输入变量在第二个页面上存储第一个页面的数据

这是我的隐藏代码:

<div id="hidden vals" style="display:none;">
    @Html.HiddenFor(model => model.userRegisterModel.UserName)
    @Html.HiddenFor(model => model.userRegisterModel.studentFirstName)
    @Html.HiddenFor(model => model.userRegisterModel.studentlastName)
    @Html.HiddenFor(model => model.userRegisterModel.Email)
    @Html.PasswordFor(model => model.userRegisterModel.Password)
    @Html.PasswordFor(model => model.userRegisterModel.ConfirmPassword)

</div>

@Html.HiddenFor(model=>model.userRegisterModel.UserName)
@Html.HiddenFor(model=>model.userRegisterModel.studentFirstName)
@Html.HiddenFor(model=>model.userRegisterModel.studentlastName)
@Html.HiddenFor(model=>model.userRegisterModel.Email)
@PasswordFor(model=>model.userRegisterModel.Password)
@PasswordFor(model=>model.userRegisterModel.ConfirmPassword)
挑战是密码和确认密码。我不想使用密码类型的隐藏字段,但我希望我的密码保持不变,但不在页面源代码中显示。但是“PasswordFor”有一个附带的问题,即它“取消填充”值并使用户重新填充

因此,为了重新声明,我需要我的密码和确认信息,最好不要显示给用户。重要的是,我需要密码并确认“查看源”中未隐藏的值


我的替代策略是使用会话变量来存储所有“第1页值”,但这还有我更愿意避免的其他陷阱。

是的。让他们保持会话状态,并在第二页/操作方法中访问它


并且在读取持久存储的会话变量后,请确保清除该特定会话变量。

我可以建议一种不同的方法吗?使用two-DIV代替两页

您仍然可以利用诸如验证(客户端和远程)之类的功能,并确保用户在没有有效表单的情况下无法前进。如果需要为第二个页面加载和/或创建一些内容,那么可以使用Ajax,表单仍然可以在页面上运行,而无需使用隐藏字段或会话变量/超时

<form ...>
  <div id="part-one">
    <!-- content... -->
  </div>

  <div id="part-two" style="display:none;">
    <!-- content... -->
  </div>

  <div>
     <button type="button" id="prev-div">Previous</button>
     <button type="button" id="next-div">Next</button>
     <button disabled="disabled" id="next-div">Submit</button>
  </div>
</form>

以前的
下一个
提交

这些按钮保持可见,您可以使用jQuery切换它们的状态,如果您的需求更改了模型类和视图的更新,则只需更新即可(如果您使用模型绑定)。

如何加密密码并将其存储在隐藏字段中,然后在提交时可以从隐藏值解密密码。是,加密是我考虑过的一种选择。这是戈纳给人留下的懒惰印象,但我必须相信有一个更简单的方法。不过,我同意这是一个替代方案。我只是相信,当有替代方案时,为什么要通过创建会话变量来加重服务器的负担@Darshan我原则上同意你和Shyju。我希望得到一个更优雅的答案,并且对这两个Session对象都有异议。另一方面,正如Shyju所指出的,这为我节省了很多管理上的麻烦。无论如何都会使用,但同意你的观点。Shyju,我的两个退步想法是会话或加密。两者都是现实的选择,尽管不是更好的选择。事实上,会话方法对我越来越重要。@Dave:我看不出这种方法有任何问题。这是一个临时存储,你会没事的。@Dave:注册似乎是一个循序渐进的过程。如果用户使用20 MNT(默认会话时间)到达第二页,您可能会再次将其重定向到第一页以填充数据。是的,我想到了这个确切的想法。当这些想法反馈给我时,我越来越倾向于这个想法。我刚回到这里,意识到我从来都不喜欢这个方法。是的,我真的很喜欢这种方法。它直观而优雅。对这种方法的冲击是,其中一些功能将被重新使用。这意味着在同一屏幕上使用2个绑定模型(1个部分)。无论哪种方式+1!不想兜圈子,但如果需要重用,可以将内部DIV标记的内容移动到局部视图,这样就可以了。此外,使用所需片段的复合视图模型将提供一种简单的方法,将模型传递到片段中,而无需担心您所描述的内容。谢谢你的+1:)