2011-04-12 92 views
41

在我看來,我有以下元素ASP.Net MVC3 Html.PasswordFor不填充

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

這是創建一個屏幕/更新用戶詳細信息。當我嘗試更新用戶時,此字段保持空白。當我將此元素更改爲TextBoxFor時,它會獲取數據。我如何獲得填充密碼字段。

+8

如果你的用戶密碼能夠放在箱子裏,你犯了一個(幾乎)不可饒恕的罪惡。 – SLaks 2011-04-12 23:50:18

+0

我認爲這是一個有效的情況是,如果你想要密碼字段顯示點或無點來指示密碼是否已經存在或沒有。填充模型時,可以說'model.Password = String.IsNullOrEmpty(user.Password)? 「」:「********」;',但'PasswordFor'不會使用該值。所以你不能給出一個值是否存在的跡象。 – xr280xr 2017-08-25 19:49:49

回答

35

這是按設計。未填寫密碼以防止意外重新提交,並防止頁面包含未加密的密碼。顯然,如果您要發回憑據,密碼是錯誤的。

在你的情況下,你可以創建一個擴展來輸入數據,或者只使用一個類型爲password的HTML輸入。

4

由於某種原因,MVC可以保護您不會這樣做。你實際上不應該這樣做,因爲不應該將用戶密碼存儲爲未加密和非哈希值。如果你的目標是結束結束在http://plaintextoffenders.com/不過,你可以這樣做:

<input type="password" name="Password" id="Password" value="@Model.Password" /> 
+0

關於plaintextoffenders,不錯的網站,但他們的「評論」部分文本幾乎不可見。檢查了這一點:http://plaintextoffenders.com/about/ ..也許這是一個雙關語?! – 2012-12-26 04:41:26

121

如上所述,最好避免做是爲了安全原因。如果您仍然想要保留密碼,以便從當前驗證失敗的位置繼續進行操作,則可以使用帶HTML屬性參數的HTML幫助程序:

+0

你的失敗爲我工作,謝謝。 – 2011-11-24 17:08:28

+14

這個答案實際上是回答這個問題! – Stian 2012-05-30 12:38:07

+0

matmat是男人! – contactmatt 2012-08-21 16:18:44

0

我發現此解決方法。我需要在表格中顯示我的密碼:

@model User 
@{ 
    @Html.Label(Model.Username, new { @class = "label" }) 
    @Html.TextBoxFor(Model => Model.Username, new { @class = "form-control" }) 

    @Html.Label(Model.Password, new { @class = "label" }) 
    @Html.TextBoxFor(Model => Model.Password, new { @class = "form-control make-pass" }) 
} 

<script type="text/javascript"> 
    $(".make-pass").attr("type", "password"); 
</script> 

這將使您輸入密碼而不會丟失值。

+0

很酷!你可以把腳本放在你的網站上。js'並將其用於任何密碼(這是我的要求) – 2017-06-09 15:01:17