Asp.Net MVC password for



我使用MVC形式给用户改变他的数据在数据库中的可能性。一切正常,除了密码。当我得到密码值从数据库控制器传递到视图,但视图不显示它。

<div class="editor-field">
            <%: Html.PasswordFor(model => model.Password) %>
            <%: Html.ValidationMessageFor(model => model.Password) %>
</div>

我可以保存密码,但它从来没有显示内部视图。无论如何,如果我改变PasswordFor为TextBoxFor它工作得很好,但我可以看到密码:(

在应用程序内部,我给用户配置一些其他功能的可能性,你可以配置你的外部电子邮件帐户。呈现带表单的视图时,带密码的框为空。如果我提交表单,那么数据库将保存空密码-我不想在密码列中保存null,如果用户不想更改密码,它应该与以前一样,我还需要避免显示它给用户。

我遇到了同样的问题,问题得到了修复下面的解决方案,可能会帮助你

您的模型类

public class yourmodel
{
   [DataType(DataType.Password)]
  public string Password {get;set; }
}

视图页面

 @Html.EditorFor(model => model.Password)

它应该是这样工作的。密码字段不应该显示数据。

如果你的密码是正确的,你甚至不能显示它。您应该对数据进行单向加密(称为散列),并仅在数据库中存储散列后的值。这样就永远无法解密了。当用户登录时,您只需对他输入的密码进行散列,并将其与存储的密码进行比较。

好的,这是一个古老的,但因为我只是需要做同样的电子邮件设置。简单的解决方案,像这样添加html属性:

<div class="editor-field">
        <%: Html.PasswordFor(model => model.Password) %>
        <%: Html.ValidationMessageFor(model => model.Password, new { value=model.Password }) %>
</div>

将设置密码输入中的密码值。

这家伙问的是答案,不是批评。这不是"正确设置密码"或不正确的问题,他试图完成的任务需要保存一个清晰的密码,因此它可以发送到电子邮件服务器或其他发送散列值会失败的系统。

密码以这种方式传递:

<%: Html.ValidationMessageFor(model => model.Password, new { value=model.Password }) %>

可以在任何浏览器的源代码中看到

用户修改密码的正常方法是提供3个 password字段(input type=password):

  1. 新密码
  2. 确认新密码
  3. 旧密码

用户在服务器上提交数据后,首先检查旧密码是否正确(因为如果用户忘记注销,您不希望其他人更改密码),然后检查用户输入的新密码是否正确并确认(因为密码字段中的字符被屏蔽,然后才更新数据库。

你应该永远不要把用户的密码渲染成html。它也适用于服务器端验证失败的情况(密码长度或复杂性)。您总是呈现空密码字段

怎么了?通常你从不显示密码。你存储一个新的,如果忘记了你发送一个链接来创建一个新的,但在任何情况下,你显示旧的不是在清晰的文本,没有点。

我同意其他一些答案:你不应该在页面中呈现密码

但如果你不在乎,想让事情顺利进行,有一个简单的方法可以做到这一点:

@Html.PasswordFor(m => m.Password, new { value = Model?.Password })

无论如何,我不明白为什么其他一些用户建议将值htmlAttribute放入验证消息而不是密码字段。真奇怪,我甚至不明白这有什么意义。

如果使用Razor语法,这里的另一个选项是使用JQuery填充密码字段。下面的代码可以工作:

$(document).ready(function() {
    $('#Password').val('@Model.Password');
});

相关内容

最新更新